sqoop-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From b...@apache.org
Subject git commit: SQOOP-646 Provide support for "set" metadata in Sqoop 2 (Jarek Jarcec Cecho)
Date Sat, 10 Nov 2012 03:35:45 GMT
Updated Branches:
  refs/heads/sqoop2 30a1af0eb -> fa815557c


SQOOP-646 Provide support for "set" metadata in Sqoop 2
(Jarek Jarcec Cecho)


Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/fa815557
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/fa815557
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/fa815557

Branch: refs/heads/sqoop2
Commit: fa815557c58cbc22352d0b2aafeaf8e0ce71f034
Parents: 30a1af0
Author: Bilung Lee <blee@apache.org>
Authored: Fri Nov 9 18:27:09 2012 -0800
Committer: Bilung Lee <blee@apache.org>
Committed: Fri Nov 9 18:27:09 2012 -0800

----------------------------------------------------------------------
 .../apache/sqoop/client/utils/FormDisplayer.java   |    5 +
 .../org/apache/sqoop/client/utils/FormFiller.java  |   76 ++++++++-
 .../apache/sqoop/json/util/FormSerialization.java  |   14 ++
 .../java/org/apache/sqoop/model/FormUtils.java     |   16 ++-
 .../java/org/apache/sqoop/model/MEnumInput.java    |  123 +++++++++++++
 .../main/java/org/apache/sqoop/model/MInput.java   |    8 +-
 .../java/org/apache/sqoop/model/MInputType.java    |    3 +
 .../java/org/apache/sqoop/model/MIntegerInput.java |   10 -
 .../java/org/apache/sqoop/model/MMapInput.java     |   10 -
 .../java/org/apache/sqoop/model/MStringInput.java  |    4 +-
 .../java/org/apache/sqoop/model/ModelError.java    |    2 +
 .../java/org/apache/sqoop/utils/ClassUtils.java    |   34 ++++-
 .../org/apache/sqoop/utils/ClassUtils.java.orig    |  141 +++++++++++++++
 .../java/org/apache/sqoop/utils/StringUtils.java   |   51 ++++++
 .../org/apache/sqoop/utils/TestClassUtils.java     |   31 ++++
 .../org/apache/sqoop/utils/TestStringUtils.java    |   35 ++++
 .../configuration/ExportJobConfiguration.java      |    2 +-
 .../configuration/ImportJobConfiguration.java      |    2 +-
 .../sqoop/framework/configuration/StorageType.java |   28 +++
 .../main/resources/framework-resources.properties  |    8 +-
 .../repository/derby/DerbyRepositoryHandler.java   |   16 ++-
 .../repository/derby/DerbySchemaConstants.java     |    2 +
 .../sqoop/repository/derby/DerbySchemaQuery.java   |   31 ++--
 23 files changed, 603 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/client/src/main/java/org/apache/sqoop/client/utils/FormDisplayer.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/utils/FormDisplayer.java b/client/src/main/java/org/apache/sqoop/client/utils/FormDisplayer.java
index 96abd42..97eea79 100644
--- a/client/src/main/java/org/apache/sqoop/client/utils/FormDisplayer.java
+++ b/client/src/main/java/org/apache/sqoop/client/utils/FormDisplayer.java
@@ -17,12 +17,14 @@
  */
 package org.apache.sqoop.client.utils;
 
+import org.apache.sqoop.model.MEnumInput;
 import org.apache.sqoop.model.MForm;
 import org.apache.sqoop.model.MFramework;
 import org.apache.sqoop.model.MInput;
 import org.apache.sqoop.model.MInputType;
 import org.apache.sqoop.model.MJobForms;
 import org.apache.sqoop.model.MStringInput;
+import org.apache.sqoop.utils.StringUtils;
 import org.codehaus.groovy.tools.shell.IO;
 
 import java.util.Iterator;
@@ -101,6 +103,9 @@ public final class FormDisplayer {
           io.out.println(((MStringInput)input).isMasked());
           io.out.print("        Size: ");
           io.out.println(((MStringInput)input).getMaxLength());
+        } else if(input.getType() == MInputType.ENUM) {
+          io.out.print("        Possible values: ");
+          io.out.println(StringUtils.join(((MEnumInput)input).getValues(), ","));
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/client/src/main/java/org/apache/sqoop/client/utils/FormFiller.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/utils/FormFiller.java b/client/src/main/java/org/apache/sqoop/client/utils/FormFiller.java
index 55d1cc0..753d78e 100644
--- a/client/src/main/java/org/apache/sqoop/client/utils/FormFiller.java
+++ b/client/src/main/java/org/apache/sqoop/client/utils/FormFiller.java
@@ -20,6 +20,7 @@ package org.apache.sqoop.client.utils;
 import jline.ConsoleReader;
 import org.apache.sqoop.client.core.Environment;
 import org.apache.sqoop.model.MConnection;
+import org.apache.sqoop.model.MEnumInput;
 import org.apache.sqoop.model.MForm;
 import org.apache.sqoop.model.MInput;
 import org.apache.sqoop.model.MIntegerInput;
@@ -180,7 +181,9 @@ public final class FormFiller {
       case INTEGER:
         return fillInputInteger(io, (MIntegerInput) input, reader, bundle);
       case MAP:
-        return fillInputMap(io, (MMapInput)input, reader, bundle);
+        return fillInputMap(io, (MMapInput) input, reader, bundle);
+      case ENUM:
+        return fillInputEnum(io, (MEnumInput) input, reader, bundle);
       default:
         io.out.println("Unsupported data type " + input.getType());
         return true;
@@ -188,6 +191,77 @@ public final class FormFiller {
   }
 
   /**
+   * Load user input for enum type.
+   *
+   * Print out numbered list of all available options and let user choose one
+   * item from that.
+   *
+   * @param io Shell's IO object
+   * @param input Input that we should read or edit
+   * @param reader Associated console reader
+   * @param bundle Resource bundle
+   * @return True if user with to continue with loading addtional inputs
+   * @throws IOException
+   */
+  private static boolean fillInputEnum(IO io,
+                                       MEnumInput input,
+                                       ConsoleReader reader,
+                                       ResourceBundle bundle)
+                                       throws IOException {
+    // Prompt in enum case
+    io.out.println(bundle.getString(input.getLabelKey()) + ": ");
+
+    // Indexes
+    int i = -1;
+    int lastChoice = -1;
+
+    // Print out all values as a numbered list
+    for(String value : input.getValues()) {
+      i++;
+
+      io.out.println("  " + i  + " : " + value);
+
+      if(!input.isEmpty() && value.equals(input.getValue())) {
+        lastChoice = i;
+      }
+    }
+
+    // Prompt
+    reader.printString("Choose: ");
+
+    // Fill previously filled index when available
+    if(lastChoice != -1) {
+      reader.putString(Integer.toString(lastChoice));
+    }
+
+    reader.flushConsole();
+    String userTyped = reader.readLine();
+
+    if (userTyped == null) {
+      return false;
+    } else if (userTyped.isEmpty()) {
+      input.setEmpty();
+    } else {
+      Integer index;
+      try {
+        index = Integer.valueOf(userTyped);
+
+        if(index < 0 || index >= input.getValues().length) {
+          errorMessage(io, "Invalid index");
+          return fillInputEnum(io, input, reader, bundle);
+        }
+
+        input.setValue(input.getValues()[index]);
+      } catch (NumberFormatException ex) {
+        errorMessage(io, "Input is not valid integer number");
+        return fillInputEnum(io, input, reader, bundle);
+      }
+    }
+
+    return true;
+  }
+
+  /**
    * Load user input for map type.
    *
    * This implementation will load one map entry at the time. Current flows is

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java b/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
index 70fa8bf..3d69bf8 100644
--- a/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
+++ b/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java
@@ -17,6 +17,7 @@
  */
 package org.apache.sqoop.json.util;
 
+import org.apache.sqoop.model.MEnumInput;
 import org.apache.sqoop.model.MForm;
 import org.apache.sqoop.model.MFormType;
 import org.apache.sqoop.model.MInput;
@@ -24,6 +25,7 @@ import org.apache.sqoop.model.MInputType;
 import org.apache.sqoop.model.MIntegerInput;
 import org.apache.sqoop.model.MMapInput;
 import org.apache.sqoop.model.MStringInput;
+import org.apache.sqoop.utils.StringUtils;
 import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 
@@ -49,6 +51,7 @@ public final class FormSerialization {
   public static final String FORM_INPUT_MASK = "mask";
   public static final String FORM_INPUT_SIZE = "size";
   public static final String FORM_INPUT_VALUE = "value";
+  public static final String FORM_INPUT_VALUES = "values";
 
   /**
    * Transform given list of forms to JSON Array object.
@@ -97,6 +100,12 @@ public final class FormSerialization {
             ((MStringInput)mInput).getMaxLength());
       }
 
+      // Enum specific serialization
+      if(mInput.getType() == MInputType.ENUM) {
+        input.put(FORM_INPUT_VALUES,
+          StringUtils.join(((MEnumInput)mInput).getValues(), ","));
+      }
+
       // Serialize value if is there
       if(!mInput.isEmpty()) {
         input.put(FORM_INPUT_VALUE, mInput.getUrlSafeValueString());
@@ -153,6 +162,11 @@ public final class FormSerialization {
           mInput = new MIntegerInput(name);
           break;
         }
+        case ENUM: {
+          String values = (String) input.get(FORM_INPUT_VALUES);
+          mInput = new MEnumInput(name, values.split(","));
+          break;
+        }
       }
 
       // Propagate form ID

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/model/FormUtils.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/FormUtils.java b/common/src/main/java/org/apache/sqoop/model/FormUtils.java
index ee92718..418b0a7 100644
--- a/common/src/main/java/org/apache/sqoop/model/FormUtils.java
+++ b/common/src/main/java/org/apache/sqoop/model/FormUtils.java
@@ -17,14 +17,13 @@
  */
 package org.apache.sqoop.model;
 
-import org.apache.log4j.Logger;
 import org.apache.sqoop.common.SqoopException;
+import org.apache.sqoop.utils.ClassUtils;
 import org.apache.sqoop.validation.Status;
 import org.apache.sqoop.validation.Validation;
 import org.json.simple.JSONObject;
 import org.json.simple.JSONValue;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -111,6 +110,8 @@ public class FormUtils {
           input = new MMapInput(fieldName);
         } else if(type == Integer.class) {
           input = new MIntegerInput(fieldName);
+        } else if(type.isEnum()) {
+          input = new MEnumInput(fieldName, ClassUtils.getEnumStrings(type));
         } else {
           throw new SqoopException(ModelError.MODEL_004,
             "Unsupported type " + type.getName() + " for input " + fieldName);
@@ -167,11 +168,16 @@ public class FormUtils {
         // We need to access this field even if it would be declared as private
         field.setAccessible(true);
 
+        // Propagate value to the configuration object
         try {
           if(input.isEmpty()) {
             field.set(configuration, null);
           } else {
-            field.set(configuration, input.getValue());
+            if (input.getType() == MInputType.ENUM) {
+              field.set(configuration, Enum.valueOf((Class<? extends Enum>)field.getType(),
(String) input.getValue()));
+            } else {
+              field.set(configuration, input.getValue());
+            }
           }
         } catch (IllegalAccessException e) {
           throw new SqoopException(ModelError.MODEL_005,
@@ -256,6 +262,8 @@ public class FormUtils {
           jsonObject.put(fieldName, map);
         } else if(type == Integer.class) {
           jsonObject.put(fieldName, value);
+        } else if(type.isEnum()) {
+          jsonObject.put(fieldName, value);
         } else {
           throw new SqoopException(ModelError.MODEL_004,
             "Unsupported type " + type.getName() + " for input " + fieldName);
@@ -300,6 +308,8 @@ public class FormUtils {
           field.set(key, map);
         } else if(type == Integer.class) {
           field.set(configuration, jsonObject.get(key));
+        } else if(type == Integer.class) {
+          field.set(configuration, Enum.valueOf((Class<? extends Enum>)field.getType(),
(String) jsonObject.get(key)));
         } else {
           throw new SqoopException(ModelError.MODEL_004,
             "Unsupported type " + type.getName() + " for input " + key);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/model/MEnumInput.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MEnumInput.java b/common/src/main/java/org/apache/sqoop/model/MEnumInput.java
new file mode 100644
index 0000000..bed2b04
--- /dev/null
+++ b/common/src/main/java/org/apache/sqoop/model/MEnumInput.java
@@ -0,0 +1,123 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sqoop.model;
+
+import org.apache.sqoop.common.SqoopException;
+import org.apache.sqoop.utils.StringUtils;
+
+import java.util.Arrays;
+
+/**
+ *
+ */
+public class MEnumInput extends MInput<String> {
+
+  /**
+   * Array of available values
+   */
+  String []values;
+
+  public MEnumInput(String name, String[] values) {
+    super(name);
+    this.values = values;
+  }
+
+  public String[] getValues() {
+    return values;
+  }
+
+  @Override
+  public void setValue(String value) {
+    // Null is allowed value
+    if(value == null) {
+      super.setValue(null);
+      return;
+    }
+
+    // However non null values must be available from given enumeration list
+    for(String allowedValue : values) {
+      if(allowedValue.equals(value)) {
+        super.setValue(value);
+        return;
+      }
+    }
+
+    // Otherwise we've got invalid value
+    throw new SqoopException(ModelError.MODEL_008,
+      "Invalid value " + value);
+  }
+
+  @Override
+  public String getUrlSafeValueString() {
+    return getValue();
+  }
+
+  @Override
+  public void restoreFromUrlSafeValueString(String valueString) {
+    setValue(valueString);
+  }
+
+  @Override
+  public MInputType getType() {
+    return MInputType.ENUM;
+  }
+
+  @Override
+  public boolean hasExtraInfo() {
+    return true;
+  }
+
+  @Override
+  public String getExtraInfoToString() {
+    return StringUtils.join(values, ",");
+  }
+
+  @Override
+  public boolean equals(Object other) {
+    if (other == this) {
+      return true;
+    }
+
+    if (!(other instanceof MEnumInput)) {
+      return false;
+    }
+
+    MEnumInput mei = (MEnumInput) other;
+    return getName().equals(mei.getName()) && Arrays.equals(values, mei.values);
+  }
+
+  @Override
+  public int hashCode() {
+    int hash = 23 + 31 * getName().hashCode();
+    for(String value : values) {
+      hash += 31 * value.hashCode();
+    }
+
+    return hash;
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return getValue() == null;
+  }
+
+  @Override
+  public void setEmpty() {
+    setValue(null);
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/model/MInput.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MInput.java b/common/src/main/java/org/apache/sqoop/model/MInput.java
index 2a87531..96397e8 100644
--- a/common/src/main/java/org/apache/sqoop/model/MInput.java
+++ b/common/src/main/java/org/apache/sqoop/model/MInput.java
@@ -62,13 +62,17 @@ public abstract class MInput<T> extends MValidatedElement {
    * @return <tt>true</tt> if this type maintains more state than what is
    * stored in the <tt>MInput</tt> base class.
    */
-  protected abstract boolean hasExtraInfo();
+  public boolean hasExtraInfo() {
+    return false;
+  }
 
   /**
    * @return the string representation of state stored in this type if
    * applicable or an empty string.
    */
-  protected abstract String getExtraInfoToString();
+  public String getExtraInfoToString() {
+    return null;
+  }
 
   /**
    * All input types must override the <tt>equals()</tt> method such that the

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/model/MInputType.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MInputType.java b/common/src/main/java/org/apache/sqoop/model/MInputType.java
index 8016349..76411e3 100644
--- a/common/src/main/java/org/apache/sqoop/model/MInputType.java
+++ b/common/src/main/java/org/apache/sqoop/model/MInputType.java
@@ -34,5 +34,8 @@ public enum MInputType {
   /** Integer input type */
   INTEGER,
 
+  /** String based input that can contain only predefined values **/
+  ENUM,
+
   ;
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/model/MIntegerInput.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MIntegerInput.java b/common/src/main/java/org/apache/sqoop/model/MIntegerInput.java
index 26477cc..d281d7e 100644
--- a/common/src/main/java/org/apache/sqoop/model/MIntegerInput.java
+++ b/common/src/main/java/org/apache/sqoop/model/MIntegerInput.java
@@ -52,16 +52,6 @@ public class MIntegerInput extends MInput<Integer> {
   }
 
   @Override
-  protected boolean hasExtraInfo() {
-    return false;
-  }
-
-  @Override
-  protected String getExtraInfoToString() {
-    return "";
-  }
-
-  @Override
   public boolean equals(Object other) {
     if (other == this) {
       return true;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/model/MMapInput.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MMapInput.java b/common/src/main/java/org/apache/sqoop/model/MMapInput.java
index de44d3f..b458022 100644
--- a/common/src/main/java/org/apache/sqoop/model/MMapInput.java
+++ b/common/src/main/java/org/apache/sqoop/model/MMapInput.java
@@ -76,16 +76,6 @@ public final class MMapInput extends MInput<Map<String, String>>
{
   }
 
   @Override
-  protected boolean hasExtraInfo() {
-    return false;
-  }
-
-  @Override
-  protected String getExtraInfoToString() {
-    return "";
-  }
-
-  @Override
   public boolean equals(Object other) {
     if (other == this) {
       return true;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/model/MStringInput.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MStringInput.java b/common/src/main/java/org/apache/sqoop/model/MStringInput.java
index 04afb38..e96ec92 100644
--- a/common/src/main/java/org/apache/sqoop/model/MStringInput.java
+++ b/common/src/main/java/org/apache/sqoop/model/MStringInput.java
@@ -72,12 +72,12 @@ public final class MStringInput extends MInput<String> {
   }
 
   @Override
-  protected boolean hasExtraInfo() {
+  public boolean hasExtraInfo() {
     return true;
   }
 
   @Override
-  protected String getExtraInfoToString() {
+  public String getExtraInfoToString() {
     return isMasked() + ":" + getMaxLength();
   }
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/model/ModelError.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/ModelError.java b/common/src/main/java/org/apache/sqoop/model/ModelError.java
index d3467c0..2c496ce 100644
--- a/common/src/main/java/org/apache/sqoop/model/ModelError.java
+++ b/common/src/main/java/org/apache/sqoop/model/ModelError.java
@@ -38,6 +38,8 @@ public enum ModelError implements ErrorCode {
 
   MODEL_007("Primitive types in configuration objects are not allowed"),
 
+  MODEL_008("Invalid input value"),
+
   ;
 
   private final String message;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java b/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java
index b63fce2..4f89b50 100644
--- a/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java
+++ b/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java
@@ -21,6 +21,10 @@ import org.apache.log4j.Logger;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
 
 public final class ClassUtils {
 
@@ -121,10 +125,9 @@ public final class ClassUtils {
    */
   public static String jarForClass(String className) {
     Class klass = loadClass(className);
-    return klass.getProtectionDomain().getCodeSource().getLocation().toString();
+    return jarForClass(klass);
   }
 
-
   /**
    * Return jar path for given class.
    *
@@ -135,6 +138,33 @@ public final class ClassUtils {
     return klass.getProtectionDomain().getCodeSource().getLocation().toString();
   }
 
+  /**
+   * Get list of constants from given Enum as a array of strings.
+   *
+   * @param klass Enumeration class
+   * @return Array of string representation or null in case of any error
+   */
+  public static String[] getEnumStrings(Class klass) {
+    if(!klass.isEnum()) {
+      return null;
+    }
+
+    ArrayList<String> values = new ArrayList<String>();
+
+    try {
+      Method methodName = klass.getMethod("name");
+
+      for(Object constant : klass.getEnumConstants()) {
+        values.add((String) methodName.invoke(constant));
+      }
+    } catch (Exception e) {
+      LOG.error("Can't get list of values from enumeration " + klass.getCanonicalName(),
e);
+      return null;
+    }
+
+    return values.toArray(new String[values.size()]);
+  }
+
   private ClassUtils() {
     // Disable explicit object creation
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java.orig
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java.orig b/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java.orig
new file mode 100644
index 0000000..b63fce2
--- /dev/null
+++ b/common/src/main/java/org/apache/sqoop/utils/ClassUtils.java.orig
@@ -0,0 +1,141 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sqoop.utils;
+
+import org.apache.log4j.Logger;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+public final class ClassUtils {
+
+  private static final Logger LOG = Logger.getLogger(ClassUtils.class);
+
+  /**
+   * Load class by given name and return corresponding Class object.
+   *
+   * This method will return null in case that the class is not found, no
+   * exception will be rised.
+   *
+   * @param className Name of class
+   * @return Class instance or NULL
+   */
+  public static Class<?> loadClass(String className) {
+    if(className == null) {
+      return null;
+    }
+
+    Class<?> klass = null;
+    try {
+      klass = Class.forName(className);
+    } catch (ClassNotFoundException ex) {
+      LOG.debug("Exception while loading class: " + className, ex);
+    }
+
+    if (klass == null) {
+      // Try the context class loader if one exists
+      ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
+      if (ctxLoader != null) {
+        try {
+          klass = ctxLoader.loadClass(className);
+        } catch (ClassNotFoundException ex) {
+          LOG.debug("Exception while load class: " + className, ex);
+        }
+      }
+    }
+
+    return klass;
+  }
+
+  /**
+   * Create instance of given class and given parameters.
+   *
+   * Please note that due to inherited limitations from Java languge, this
+   * method can't handle primitive types and NULL values.
+   *
+   * @param className Class name
+   * @param args Objects that should be passed as constructor arguments.
+   * @return Instance of new class or NULL in case of any error
+   */
+  public static Object instantiate(String className, Object ... args) {
+    return instantiate(loadClass(className), args);
+  }
+
+  /**
+   * Create instance of given class and given parameters.
+   *
+   * Please note that due to inherited limitations from Java languge, this
+   * method can't handle primitive types and NULL values.
+   *
+   * @param klass Class object
+   * @param args Objects that should be passed as constructor arguments.
+   * @return Instance of new class or NULL in case of any error
+   */
+  public static Object instantiate(Class klass, Object ... args) {
+    if(klass == null) {
+      return null;
+    }
+
+    Class []argumentTypes = new Class[args.length];
+    for(int i = 0; i < args.length; i++) {
+      Class type = args[i].getClass();
+       argumentTypes[i] = type;
+    }
+
+    try {
+      Constructor constructor = klass.getConstructor(argumentTypes);
+      return constructor.newInstance(args);
+    } catch (NoSuchMethodException e) {
+      LOG.error("Can't find such constructor.", e);
+    } catch (InvocationTargetException e) {
+      LOG.error("Can't instantiate object.", e);
+    } catch (InstantiationException e) {
+      LOG.error("Can't instantiate object.", e);
+    } catch (IllegalAccessException e) {
+      LOG.error("Can't instantiate object.", e);
+    }
+
+    return null;
+  }
+
+  /**
+   * Return jar path for given class.
+   *
+   * @param className Class name
+   * @return Path on local filesystem to jar where given jar is present
+   */
+  public static String jarForClass(String className) {
+    Class klass = loadClass(className);
+    return klass.getProtectionDomain().getCodeSource().getLocation().toString();
+  }
+
+
+  /**
+   * Return jar path for given class.
+   *
+   * @param klass Class object
+   * @return Path on local filesystem to jar where given jar is present
+   */
+  public static String jarForClass(Class klass) {
+    return klass.getProtectionDomain().getCodeSource().getLocation().toString();
+  }
+
+  private ClassUtils() {
+    // Disable explicit object creation
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/main/java/org/apache/sqoop/utils/StringUtils.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/utils/StringUtils.java b/common/src/main/java/org/apache/sqoop/utils/StringUtils.java
new file mode 100644
index 0000000..97d356a
--- /dev/null
+++ b/common/src/main/java/org/apache/sqoop/utils/StringUtils.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sqoop.utils;
+
+/**
+ * Convenience String methods.
+ *
+ * We might consider replacing this with commons-lang library at some point.
+ */
+public final class StringUtils {
+
+  public static String join(String []array, String separator) {
+    if(array == null) {
+      return null;
+    }
+
+    StringBuilder sb = new StringBuilder();
+    boolean first = true;
+
+    for(String item : array) {
+      if(first) {
+        first = false;
+      } else {
+        sb.append(separator);
+      }
+
+      sb.append(item);
+    }
+
+    return sb.toString();
+  }
+
+  private StringUtils() {
+    // Instantiation is prohibited
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/test/java/org/apache/sqoop/utils/TestClassUtils.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/utils/TestClassUtils.java b/common/src/test/java/org/apache/sqoop/utils/TestClassUtils.java
index f0b0742..a5c4e69 100644
--- a/common/src/test/java/org/apache/sqoop/utils/TestClassUtils.java
+++ b/common/src/test/java/org/apache/sqoop/utils/TestClassUtils.java
@@ -65,4 +65,35 @@ public class TestClassUtils extends TestCase {
       this.c = c;
     }
   }
+
+  public void testGetEnumStrings() {
+    assertNull(ClassUtils.getEnumStrings(A.class));
+
+    assertEquals(
+      new String[] {"A", "B", "C"},
+      ClassUtils.getEnumStrings(EnumA.class)
+    );
+    assertEquals(
+      new String[] {"X", "Y"},
+      ClassUtils.getEnumStrings(EnumX.class)
+    );
+  }
+
+  enum EnumX {
+    X, Y
+  }
+
+  enum EnumA {
+    A, B, C
+  }
+
+  public void assertEquals(String[] expected, String[] actual) {
+    assertEquals("Arrays do not have same length", expected.length, actual.length);
+
+    for(int i = 0; i < expected.length; i++) {
+      assertEquals("Items on position " + i + " differs, expected "
+        + expected[i] + ", actual " + actual[i],
+        expected[i], actual[i]);
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/common/src/test/java/org/apache/sqoop/utils/TestStringUtils.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/utils/TestStringUtils.java b/common/src/test/java/org/apache/sqoop/utils/TestStringUtils.java
new file mode 100644
index 0000000..e0ca2ec
--- /dev/null
+++ b/common/src/test/java/org/apache/sqoop/utils/TestStringUtils.java
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sqoop.utils;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ */
+public class TestStringUtils extends TestCase {
+
+  public void testJoin() {
+    assertNull(StringUtils.join(null, "a"));
+
+    String []a = new String[] {"a", "b", "c"};
+
+    assertEquals("a,b,c", StringUtils.join(a, ","));
+    assertEquals("abc", StringUtils.join(a, ""));
+  }
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/core/src/main/java/org/apache/sqoop/framework/configuration/ExportJobConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/framework/configuration/ExportJobConfiguration.java
b/core/src/main/java/org/apache/sqoop/framework/configuration/ExportJobConfiguration.java
index 9da5133..90541e9 100644
--- a/core/src/main/java/org/apache/sqoop/framework/configuration/ExportJobConfiguration.java
+++ b/core/src/main/java/org/apache/sqoop/framework/configuration/ExportJobConfiguration.java
@@ -29,5 +29,5 @@ import static org.apache.sqoop.framework.FrameworkConstants.*;
 public class ExportJobConfiguration {
 
   @Input(form = FORM_OUTPUT, size = 25)
-  public String outputFormat;
+  public String ignored;
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/core/src/main/java/org/apache/sqoop/framework/configuration/ImportJobConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/framework/configuration/ImportJobConfiguration.java
b/core/src/main/java/org/apache/sqoop/framework/configuration/ImportJobConfiguration.java
index de8ddbc..d811593 100644
--- a/core/src/main/java/org/apache/sqoop/framework/configuration/ImportJobConfiguration.java
+++ b/core/src/main/java/org/apache/sqoop/framework/configuration/ImportJobConfiguration.java
@@ -29,7 +29,7 @@ import static org.apache.sqoop.framework.FrameworkConstants.*;
 public class ImportJobConfiguration {
 
   @Input(form = FORM_OUTPUT, size = 25)
-  public String outputFormat;
+  public StorageType storageType;
 
   @Input(form = FORM_OUTPUT, size = 25)
   public String outputDirectory;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/core/src/main/java/org/apache/sqoop/framework/configuration/StorageType.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/framework/configuration/StorageType.java
b/core/src/main/java/org/apache/sqoop/framework/configuration/StorageType.java
new file mode 100644
index 0000000..dbe9f95
--- /dev/null
+++ b/core/src/main/java/org/apache/sqoop/framework/configuration/StorageType.java
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sqoop.framework.configuration;
+
+/**
+ * Various storage types that Sqoop is supporting
+ */
+public enum StorageType {
+  /**
+   * Direct HDFS import
+   */
+  HDFS,
+}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/core/src/main/resources/framework-resources.properties
----------------------------------------------------------------------
diff --git a/core/src/main/resources/framework-resources.properties b/core/src/main/resources/framework-resources.properties
index 9f19469..872f48e 100644
--- a/core/src/main/resources/framework-resources.properties
+++ b/core/src/main/resources/framework-resources.properties
@@ -32,8 +32,12 @@ form-output-label = Output configuration
 form-output-help = You must supply the information requested in order to \
                    get information where you want to store your data.
 
-outputFormat-label = Output format
-outputFormat-help = Output format that should be used
+storageType-label = Storage type
+storageType-help = Target on Hadoop ecosystem where to store data
 
 outputDirectory-label = Output directory
 outputDirectory-help = Output directory for final data
+
+ignored-label = Ignored
+ignored-help = This value is ignored
+

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
index 7006273..90aef4b 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java
@@ -40,6 +40,7 @@ import org.apache.log4j.Logger;
 import org.apache.sqoop.common.SqoopException;
 import org.apache.sqoop.model.MConnection;
 import org.apache.sqoop.model.MConnectionForms;
+import org.apache.sqoop.model.MEnumInput;
 import org.apache.sqoop.model.MIntegerInput;
 import org.apache.sqoop.model.MJob;
 import org.apache.sqoop.model.MJobForms;
@@ -56,6 +57,7 @@ import org.apache.sqoop.repository.JdbcRepositoryContext;
 import org.apache.sqoop.repository.JdbcRepositoryHandler;
 import org.apache.sqoop.repository.JdbcRepositoryTransactionFactory;
 import org.apache.sqoop.submission.SubmissionStatus;
+import org.apache.sqoop.utils.StringUtils;
 
 /**
  * JDBC based repository handler for Derby database.
@@ -1149,6 +1151,7 @@ public class DerbyRepositoryHandler implements JdbcRepositoryHandler
{
       baseInputStmt.setLong(2, formId);
       baseInputStmt.setShort(3, inputIndex++);
       baseInputStmt.setString(4, input.getType().name());
+      // String specific column(s)
       if (input.getType().equals(MInputType.STRING)) {
         MStringInput	strInput = (MStringInput) input;
         baseInputStmt.setBoolean(5, strInput.isMasked());
@@ -1157,6 +1160,13 @@ public class DerbyRepositoryHandler implements JdbcRepositoryHandler
{
         baseInputStmt.setNull(5, Types.BOOLEAN);
         baseInputStmt.setNull(6, Types.INTEGER);
       }
+      // Enum specific column(s)
+      if(input.getType() == MInputType.ENUM) {
+        baseInputStmt.setString(7, StringUtils.join(((MEnumInput)input).getValues(), ","));
+      } else {
+        baseInputStmt.setNull(7, Types.VARCHAR);
+      }
+
       int baseInputCount = baseInputStmt.executeUpdate();
       if (baseInputCount != 1) {
         throw new SqoopException(DerbyRepoError.DERBYREPO_0017,
@@ -1268,7 +1278,8 @@ public class DerbyRepositoryHandler implements JdbcRepositoryHandler
{
         String inputType = rsetInput.getString(5);
         boolean inputStrMask = rsetInput.getBoolean(6);
         short inputStrLength = rsetInput.getShort(7);
-        String value = rsetInput.getString(8);
+        String inputEnumValues = rsetInput.getString(8);
+        String value = rsetInput.getString(9);
 
         MInputType mit = MInputType.valueOf(inputType);
 
@@ -1283,6 +1294,9 @@ public class DerbyRepositoryHandler implements JdbcRepositoryHandler
{
         case INTEGER:
           input = new MIntegerInput(inputName);
           break;
+        case ENUM:
+          input = new MEnumInput(inputName, inputEnumValues.split(","));
+          break;
         default:
           throw new SqoopException(DerbyRepoError.DERBYREPO_0006,
               "input-" + inputName + ":" + inputId + ":"

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
index 1f10674..3664df6 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaConstants.java
@@ -76,6 +76,8 @@ public final class DerbySchemaConstants {
 
   public static final String COLUMN_SQI_STRLENGTH = "SQI_STRLENGTH";
 
+  public static final String COLUMN_SQI_ENUMVALS = "SQI_ENUMVALS";
+
   // SQ_CONNECTION
 
   public static final String TABLE_SQ_CONNECTION_NAME = "SQ_CONNECTION";

http://git-wip-us.apache.org/repos/asf/sqoop/blob/fa815557/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
index 9305445..496e3d9 100644
--- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
+++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbySchemaQuery.java
@@ -63,6 +63,7 @@ import static org.apache.sqoop.repository.derby.DerbySchemaConstants.*;
  *    | SQI_TYPE: VARCHAR(32)      | "STRING"|"MAP"
  *    | SQI_STRMASK: BOOLEAN       |
  *    | SQI_STRLENGTH: SMALLINT    |
+ *    | SQI_ENUMVALS: VARCHAR(100) |
  *    +----------------------------+
  * </pre>
  * </p>
@@ -165,8 +166,9 @@ public final class DerbySchemaQuery {
       + "PRIMARY KEY, " + COLUMN_SQI_NAME + " VARCHAR(64), "
       + COLUMN_SQI_FORM + " BIGINT, " + COLUMN_SQI_INDEX + " SMALLINT, "
       + COLUMN_SQI_TYPE + " VARCHAR(32), " + COLUMN_SQI_STRMASK + " BOOLEAN, "
-      + COLUMN_SQI_STRLENGTH + " SMALLINT, FOREIGN KEY (" + COLUMN_SQI_FORM
-      + ") REFERENCES " + TABLE_SQ_FORM + " (" + COLUMN_SQF_ID + "))";
+      + COLUMN_SQI_STRLENGTH + " SMALLINT, " + COLUMN_SQI_ENUMVALS
+      + " VARCHAR(100), FOREIGN KEY (" + COLUMN_SQI_FORM + ") REFERENCES "
+      + TABLE_SQ_FORM + " (" + COLUMN_SQF_ID + "))";
 
   // DDL: Create table SQ_CONNECTION
   public static final String QUERY_CREATE_TABLE_SQ_CONNECTION =
@@ -242,18 +244,19 @@ public final class DerbySchemaQuery {
   public static final String STMT_FETCH_INPUT =
       "SELECT " + COLUMN_SQI_ID + ", " + COLUMN_SQI_NAME + ", "
       + COLUMN_SQI_FORM + ", " + COLUMN_SQI_INDEX + ", " + COLUMN_SQI_TYPE
-      + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH
-      + ", cast(null as varchar(100)) FROM " + TABLE_SQ_INPUT + " WHERE "
-      + COLUMN_SQI_FORM + " = ? ORDER BY " + COLUMN_SQI_INDEX;
+      + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH + ", "
+      + COLUMN_SQI_ENUMVALS + ", cast(null as varchar(100)) FROM "
+      + TABLE_SQ_INPUT + " WHERE " + COLUMN_SQI_FORM + " = ? ORDER BY "
+      + COLUMN_SQI_INDEX;
 
   // DML: Fetch inputs and values for a given connection
   public static final String STMT_FETCH_CONNECTION_INPUT =
       "SELECT " + COLUMN_SQI_ID + ", " + COLUMN_SQI_NAME + ", "
       + COLUMN_SQI_FORM + ", " + COLUMN_SQI_INDEX + ", " + COLUMN_SQI_TYPE
-      + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH
-      + ", " + COLUMN_SQNI_VALUE + " FROM " + TABLE_SQ_INPUT
-      + " LEFT OUTER JOIN " + TABLE_SQ_CONNECTION_INPUT + " ON "
-      + COLUMN_SQNI_INPUT + " = " + COLUMN_SQI_ID + " AND "
+      + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH + ","
+      + COLUMN_SQI_ENUMVALS + ", " + COLUMN_SQNI_VALUE + " FROM "
+      + TABLE_SQ_INPUT + " LEFT OUTER JOIN " + TABLE_SQ_CONNECTION_INPUT
+      + " ON " + COLUMN_SQNI_INPUT + " = " + COLUMN_SQI_ID + " AND "
       + COLUMN_SQNI_CONNECTION + " = ? WHERE " + COLUMN_SQI_FORM + " = ? AND ("
       + COLUMN_SQNI_CONNECTION + " = ? OR " + COLUMN_SQNI_CONNECTION
       + " IS NULL) ORDER BY " + COLUMN_SQI_INDEX;
@@ -262,9 +265,9 @@ public final class DerbySchemaQuery {
   public static final String STMT_FETCH_JOB_INPUT =
       "SELECT " + COLUMN_SQI_ID + ", " + COLUMN_SQI_NAME + ", "
       + COLUMN_SQI_FORM + ", " + COLUMN_SQI_INDEX + ", " + COLUMN_SQI_TYPE
-      + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH
-      + ", " + COLUMN_SQBI_VALUE + " FROM " + TABLE_SQ_INPUT
-      + " LEFT OUTER JOIN " + TABLE_SQ_JOB_INPUT + " ON "
+      + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH + ", "
+      + COLUMN_SQI_ENUMVALS + ", " + COLUMN_SQBI_VALUE + " FROM "
+      + TABLE_SQ_INPUT + " LEFT OUTER JOIN " + TABLE_SQ_JOB_INPUT + " ON "
       + COLUMN_SQBI_INPUT + " = " + COLUMN_SQI_ID + " AND  " + COLUMN_SQBI_JOB
       + " = ? WHERE " + COLUMN_SQI_FORM + " = ? AND (" + COLUMN_SQBI_JOB
       + " = ? OR " + COLUMN_SQBI_JOB + " IS NULL) ORDER BY "
@@ -285,8 +288,8 @@ public final class DerbySchemaQuery {
   public static final String STMT_INSERT_INPUT_BASE =
       "INSERT INTO " + TABLE_SQ_INPUT + " (" + COLUMN_SQI_NAME + ", "
       + COLUMN_SQI_FORM + ", " + COLUMN_SQI_INDEX + ", " + COLUMN_SQI_TYPE
-      + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH + ") "
-      + "VALUES (?, ?, ?, ?, ?, ?)";
+      + ", " + COLUMN_SQI_STRMASK + ", " + COLUMN_SQI_STRLENGTH + ", "
+      + COLUMN_SQI_ENUMVALS + ") " + "VALUES (?, ?, ?, ?, ?, ?, ?)";
 
   // DML: Insert new connection
   public static final String STMT_INSERT_CONNECTION =


Mime
View raw message