Repository: sqoop Updated Branches: refs/heads/sqoop2 938317c3d -> 8cb7fc48a
SQOOP-1930: Sqoop2: Enforce a non empty schema name and column names (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/8cb7fc48 Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/8cb7fc48 Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/8cb7fc48 Branch: refs/heads/sqoop2 Commit: 8cb7fc48abe4c1fdb80ed39cc0eeac7f8937f729 Parents: 938317c Author: Abraham Elmahrek <[email protected]> Authored: Fri Dec 19 13:59:42 2014 -0800 Committer: Abraham Elmahrek <[email protected]> Committed: Fri Dec 19 13:59:42 2014 -0800 ---------------------------------------------------------------------- .../apache/sqoop/schema/ByteArraySchema.java | 12 ++++---- .../org/apache/sqoop/schema/NullSchema.java | 3 +- .../java/org/apache/sqoop/schema/Schema.java | 8 ++--- .../org/apache/sqoop/schema/SchemaError.java | 4 ++- .../org/apache/sqoop/schema/type/Column.java | 6 +++- .../org/apache/sqoop/json/TestSchemaBean.java | 3 -- .../json/util/TestSchemaSerialization.java | 31 ++++++++++++++++++++ 7 files changed, 51 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/8cb7fc48/common/src/main/java/org/apache/sqoop/schema/ByteArraySchema.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/schema/ByteArraySchema.java b/common/src/main/java/org/apache/sqoop/schema/ByteArraySchema.java index 4e2ab96..804ebf0 100644 --- a/common/src/main/java/org/apache/sqoop/schema/ByteArraySchema.java +++ b/common/src/main/java/org/apache/sqoop/schema/ByteArraySchema.java @@ -20,14 +20,16 @@ package org.apache.sqoop.schema; import org.apache.sqoop.schema.type.Binary; /*** - * Schema holding a single field of Binary data - * Used to support connectors to schemaless / unstructured systems - * Such as HDFS or Kafka + * Schema holding a single field of Binary data Used to support connectors to + * schemaless / unstructured systems Such as HDFS or Kafka */ public class ByteArraySchema extends Schema { + private static final String BYTE_ARRAY_SCHEMA_NAME = "ByteArraySchema"; + private static final String BYTE_ARRAY_COLUMN_NAME = "ByteArraySchema_Bytes"; + public static final ByteArraySchema instance = (ByteArraySchema) new ByteArraySchema() - .addColumn(new Binary("ByteArraySchema_Bytes")); + .addColumn(new Binary(BYTE_ARRAY_COLUMN_NAME)); public static ByteArraySchema getInstance() { return instance; @@ -35,6 +37,6 @@ public class ByteArraySchema extends Schema { // To avoid instantiation private ByteArraySchema() { - super("ByteArraySchema"); + super(BYTE_ARRAY_SCHEMA_NAME); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/8cb7fc48/common/src/main/java/org/apache/sqoop/schema/NullSchema.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/schema/NullSchema.java b/common/src/main/java/org/apache/sqoop/schema/NullSchema.java index c3393a6..4a9ae11 100644 --- a/common/src/main/java/org/apache/sqoop/schema/NullSchema.java +++ b/common/src/main/java/org/apache/sqoop/schema/NullSchema.java @@ -19,6 +19,7 @@ package org.apache.sqoop.schema; public class NullSchema extends Schema { + private static final String NULL_SCHEMA_NAME = "NullSchema"; public static final NullSchema instance = new NullSchema(); public static NullSchema getInstance() { @@ -27,6 +28,6 @@ public class NullSchema extends Schema { private NullSchema() { // empty string is the name - super(""); + super(NULL_SCHEMA_NAME); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/8cb7fc48/common/src/main/java/org/apache/sqoop/schema/Schema.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/schema/Schema.java b/common/src/main/java/org/apache/sqoop/schema/Schema.java index 9eef72b..5951e36 100644 --- a/common/src/main/java/org/apache/sqoop/schema/Schema.java +++ b/common/src/main/java/org/apache/sqoop/schema/Schema.java @@ -65,7 +65,9 @@ public class Schema { public Schema(String name) { this(); - assert name != null; + if (StringUtils.isEmpty(name)) { + throw new SqoopException(SchemaError.SCHEMA_0006, "Schema: " + name); + } this.name = name; } @@ -80,10 +82,6 @@ public class Schema { * @return a reference to this object */ public Schema addColumn(Column column) { - if(column.getName() == null) { - throw new SqoopException(SchemaError.SCHEMA_0001, "Column: " + column); - } - if(columNames.contains(column.getName())) { throw new SqoopException(SchemaError.SCHEMA_0002, "Column: " + column); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/8cb7fc48/common/src/main/java/org/apache/sqoop/schema/SchemaError.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/schema/SchemaError.java b/common/src/main/java/org/apache/sqoop/schema/SchemaError.java index d430a64..33e4672 100644 --- a/common/src/main/java/org/apache/sqoop/schema/SchemaError.java +++ b/common/src/main/java/org/apache/sqoop/schema/SchemaError.java @@ -34,7 +34,9 @@ public enum SchemaError implements ErrorCode { SCHEMA_0004("Non-null target column has no matching source column"), - SCHEMA_0005("No matching method available for source and target schemas") + SCHEMA_0005("No matching method available for source and target schemas"), + + SCHEMA_0006("Schema without name"), ; http://git-wip-us.apache.org/repos/asf/sqoop/blob/8cb7fc48/common/src/main/java/org/apache/sqoop/schema/type/Column.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/schema/type/Column.java b/common/src/main/java/org/apache/sqoop/schema/type/Column.java index 2d7eac2..6f1f8d8 100644 --- a/common/src/main/java/org/apache/sqoop/schema/type/Column.java +++ b/common/src/main/java/org/apache/sqoop/schema/type/Column.java @@ -18,6 +18,8 @@ package org.apache.sqoop.schema.type; import org.apache.commons.lang.StringUtils; +import org.apache.sqoop.common.SqoopException; +import org.apache.sqoop.schema.SchemaError; /** * Base class for all the supported types in the Sqoop {@link #Schema} @@ -42,7 +44,9 @@ public abstract class Column { } public Column(String name, Boolean nullable) { - assert !StringUtils.isEmpty(name); + if (StringUtils.isEmpty(name)) { + throw new SqoopException(SchemaError.SCHEMA_0001, "Column name: " + name); + } this.name = name; setNullable(nullable); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/8cb7fc48/common/src/test/java/org/apache/sqoop/json/TestSchemaBean.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/sqoop/json/TestSchemaBean.java b/common/src/test/java/org/apache/sqoop/json/TestSchemaBean.java index e8bc085..960a13e 100644 --- a/common/src/test/java/org/apache/sqoop/json/TestSchemaBean.java +++ b/common/src/test/java/org/apache/sqoop/json/TestSchemaBean.java @@ -37,13 +37,10 @@ public class TestSchemaBean extends TestSchemaSerialization { protected Schema transfer(Schema schema) { SchemaBean extractBean = new SchemaBean(schema); JSONObject extractJson = extractBean.extract(true); - String transferredString = extractJson.toJSONString(); - JSONObject restoreJson = JSONUtils.parse(transferredString); SchemaBean restoreBean = new SchemaBean(); restoreBean.restore(restoreJson); - return restoreBean.getSchema(); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/8cb7fc48/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 f047556..9031c99 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 @@ -23,7 +23,9 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; +import org.apache.sqoop.common.SqoopException; import org.apache.sqoop.json.JSONUtils; +import org.apache.sqoop.schema.ByteArraySchema; import org.apache.sqoop.schema.NullSchema; import org.apache.sqoop.schema.Schema; import org.apache.sqoop.schema.type.Array; @@ -61,6 +63,35 @@ public class TestSchemaSerialization { transferAndAssert(NullSchema.getInstance()); } + @SuppressWarnings("unused") + @Test(expected = SqoopException.class) + public void testEmptySchemaName() { + Schema schema = new Schema(""); + } + + @SuppressWarnings("unused") + @Test(expected = SqoopException.class) + public void testNullSchemaName() { + Schema schema = new Schema(null); + } + + @SuppressWarnings("unused") + @Test(expected = SqoopException.class) + public void testSchemaWithNullColumnName() { + Schema schema = new Schema("test").addColumn(new Text(null)); + } + + @SuppressWarnings("unused") + @Test(expected = SqoopException.class) + public void testSchemaWithEmptyColumnName() { + Schema schema = new Schema("test").addColumn(new Text("")); + } + + @Test + public void testByteArraySchemaObject() { + transferAndAssert(ByteArraySchema.getInstance()); + } + @Test public void testArray() { // create an array type containing decimals
