Repository: sqoop Updated Branches: refs/heads/sqoop2 8ebfdd2f4 -> 77eb52e24
SQOOP-1716: Add Options as a field in the Enum object (Veena Basavaraj via Abraham Elmahrek) Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/77eb52e2 Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/77eb52e2 Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/77eb52e2 Branch: refs/heads/sqoop2 Commit: 77eb52e24060a3cbf853aa9d3cb6f2a517a8bd24 Parents: 8ebfdd2 Author: Abraham Elmahrek <[email protected]> Authored: Tue Nov 18 15:44:41 2014 -0800 Committer: Abraham Elmahrek <[email protected]> Committed: Tue Nov 18 15:45:14 2014 -0800 ---------------------------------------------------------------------- .../sqoop/json/util/SchemaSerialization.java | 28 +++++++-- .../java/org/apache/sqoop/schema/type/Enum.java | 60 ++++++++++++++++++-- .../json/util/TestSchemaSerialization.java | 10 +++- 3 files changed, 87 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/77eb52e2/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java b/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java index dec8c0e..112a404 100644 --- a/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java +++ b/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java @@ -17,6 +17,8 @@ */ package org.apache.sqoop.json.util; +import java.util.HashSet; + import org.apache.sqoop.schema.NullSchema; import org.apache.sqoop.schema.Schema; import org.apache.sqoop.schema.type.AbstractComplexListType; @@ -62,6 +64,9 @@ public class SchemaSerialization { // arrays and set attribute private static final String LIST = "list"; private static final String LIST_TYPE = "listType"; + // enum attribute + private static final String ENUM_OPTIONS = "options"; + // number attribute private static final String BYTE_SIZE = "byteSize"; // string attribute @@ -126,10 +131,17 @@ public class SchemaSerialization { map.put(VALUE, extractColumn(((Map) column).getValue())); break; case ENUM: + JSONObject enumList = new JSONObject(); + ret.put(LIST, enumList); + enumList.put(LIST_TYPE, extractColumn(((AbstractComplexListType) column).getListType())); + JSONArray optionsArray = new JSONArray(); + optionsArray.addAll(((Enum)column).getOptions()); + enumList.put(ENUM_OPTIONS, optionsArray); + break; case SET: - JSONObject list = new JSONObject(); - ret.put(LIST, list); - list.put(LIST_TYPE, extractColumn(((AbstractComplexListType) column).getListType())); + JSONObject set = new JSONObject(); + ret.put(LIST, set); + set.put(LIST_TYPE, extractColumn(((AbstractComplexListType) column).getListType())); break; case ARRAY: JSONObject arrayList = new JSONObject(); @@ -180,6 +192,8 @@ public class SchemaSerialization { Column value = null; Long arraySize = null; Column listType = null; + java.util.Set<String> options = new HashSet<String>(); + // complex type attribute if (obj.containsKey(MAP)) { JSONObject map = (JSONObject) obj.get(MAP); @@ -197,6 +211,12 @@ public class SchemaSerialization { listType = restoreColumn((JSONObject) list.get(LIST_TYPE)); } arraySize = (Long) list.get(SIZE); + if (list.containsKey(ENUM_OPTIONS)) { + JSONArray optionsArray = (JSONArray) list.get(ENUM_OPTIONS); + for (int n = 0; n < optionsArray.size(); n++) { + options.add((String) optionsArray.get(n)); + } + } } ColumnType type = ColumnType.valueOf((String) obj.get(TYPE)); Column output = null; @@ -225,7 +245,7 @@ public class SchemaSerialization { output = new Decimal(name).setPrecision(precision).setScale(scale); break; case ENUM: - output = new Enum(name).setListType(listType); + output = new Enum(name, options).setListType(listType); break; case FIXED_POINT: Boolean unsigned = (Boolean) obj.get(UNSIGNED); http://git-wip-us.apache.org/repos/asf/sqoop/blob/77eb52e2/common/src/main/java/org/apache/sqoop/schema/type/Enum.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/schema/type/Enum.java b/common/src/main/java/org/apache/sqoop/schema/type/Enum.java index 1388d49..33e6dec 100644 --- a/common/src/main/java/org/apache/sqoop/schema/type/Enum.java +++ b/common/src/main/java/org/apache/sqoop/schema/type/Enum.java @@ -17,6 +17,9 @@ */ package org.apache.sqoop.schema.type; +import java.util.Set; +import java.util.HashSet; + /** * Enum is a set of predefined values of its own type * @@ -25,16 +28,37 @@ package org.apache.sqoop.schema.type; public class Enum extends AbstractComplexListType { + // The options set contains the possible values for the Enum + private Set<String> options; + public Enum(String name) { super(name); + setOptions(new HashSet<String>()); + } + + public Enum(String name, Set<String> options) { + super(name); + setOptions(options); } - public Enum(String name, Column listType) { + public Enum(String name, Set<String> options, Column listType) { super(name, listType); + setOptions(options); } - public Enum(String name, Boolean nullable, Column listType) { + public Enum(String name, Boolean nullable, Set<String> options, Column listType) { super(name, nullable, listType); + setOptions(options); + } + + public Enum setOptions(Set<String> options) { + assert options != null; + this.options = options; + return this; + } + + public Set<String> getOptions() { + return options; } @Override @@ -44,8 +68,34 @@ public class Enum extends AbstractComplexListType { @Override public String toString() { - return new StringBuilder("Enum{") - .append(super.toString()) - .append("}").toString(); + return new StringBuilder("Enum{").append(super.toString()).append(",options=").append(options) + .append("}").toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Enum)) { + return false; + } + if (!super.equals(o)) { + return false; + } + + Enum that = (Enum) o; + + if (options != null ? !options.equals(that.options) : that.options != null) + return false; + + return true; + } + + @Override + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + (options != null ? options.hashCode() : 0); + return result; } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/77eb52e2/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java b/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java index 9f8ee3e..8ae856f 100644 --- a/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java +++ b/common/src/test/java/org/apache/sqoop/json/util/TestSchemaSerialization.java @@ -19,6 +19,10 @@ package org.apache.sqoop.json.util; import static org.junit.Assert.assertEquals; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; + import org.apache.sqoop.schema.NullSchema; import org.apache.sqoop.schema.Schema; import org.apache.sqoop.schema.type.Array; @@ -96,7 +100,9 @@ public class TestSchemaSerialization { @Test public void testEnum() { - Schema e = new Schema("e").addColumn(new Enum("e", new Text("e1"))); + Schema e = new Schema("e").addColumn(new Enum("e", Collections + .unmodifiableSet(new HashSet<String>(Arrays.asList(new String[] { "A", "B" }))), new Text( + "e1"))); transferAndAssert(e); } @@ -156,7 +162,7 @@ public class TestSchemaSerialization { .addColumn(new Date("d")) .addColumn(new DateTime("e")) .addColumn(new Decimal("f")) - .addColumn(new Enum("g", new Text("g1"))) + .addColumn(new Enum("g", Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(new String[] { "X", "Y" }))), new Text("g1"))) .addColumn(new FixedPoint("h")) .addColumn(new FloatingPoint("i")) .addColumn(new Map("j", new Text("j1"), new Text("j2")))
