This is an automated email from the ASF dual-hosted git repository. volodymyr pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/drill.git
commit fb30eb9a9b1dfb69fe4082ac2d3738b355572b6a Author: Arina Ielchiieva <[email protected]> AuthorDate: Fri Jul 26 14:47:51 2019 +0300 DRILL-7332: Allow parsing empty schema closes #1828 --- .../java/org/apache/drill/TestSchemaCommands.java | 66 +++++++++++++++------- .../record/metadata/schema/parser/SchemaParser.g4 | 2 +- .../metadata/schema/parser/TestSchemaParser.java | 14 ++++- 3 files changed, 57 insertions(+), 25 deletions(-) diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestSchemaCommands.java b/exec/java-exec/src/test/java/org/apache/drill/TestSchemaCommands.java index 3258e1c..f4965ca 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/TestSchemaCommands.java +++ b/exec/java-exec/src/test/java/org/apache/drill/TestSchemaCommands.java @@ -17,6 +17,7 @@ */ package org.apache.drill; +import org.apache.commons.io.FileUtils; import org.apache.drill.categories.SqlTest; import org.apache.drill.common.exceptions.UserException; import org.apache.drill.common.exceptions.UserRemoteException; @@ -143,7 +144,7 @@ public class TestSchemaCommands extends ClusterTest { try { run("create schema (col1 int, col2 int) for table %s.`%s`", "dfs.tmp", table); } finally { - assertTrue(tablePath.delete()); + FileUtils.deleteQuietly(tablePath); } } @@ -159,7 +160,7 @@ public class TestSchemaCommands extends ClusterTest { try { run("create schema (col1 int, col2 int) path '%s'", schema.getPath()); } finally { - assertTrue(schema.delete()); + FileUtils.deleteQuietly(schema); } } @@ -213,9 +214,7 @@ public class TestSchemaCommands extends ClusterTest { assertTrue(varcharColumn.isNullable()); assertEquals(TypeProtos.MinorType.VARCHAR, varcharColumn.type()); } finally { - if (schemaFile.exists()) { - assertTrue(schemaFile.delete()); - } + FileUtils.deleteQuietly(schemaFile); } } @@ -267,7 +266,6 @@ public class TestSchemaCommands extends ClusterTest { ColumnMetadata updatedColumn = updatedSchemaContainer.getSchema().metadata("c"); assertTrue(updatedColumn.isNullable()); assertEquals(TypeProtos.MinorType.VARCHAR, updatedColumn.type()); - } finally { run("drop table if exists %s", table); } @@ -305,9 +303,7 @@ public class TestSchemaCommands extends ClusterTest { assertEquals(properties, schema.properties()); } finally { - if (schemaFile.exists()) { - assertTrue(schemaFile.delete()); - } + FileUtils.deleteQuietly(schemaFile); } } @@ -335,9 +331,7 @@ public class TestSchemaCommands extends ClusterTest { assertNotNull(schema.properties()); assertEquals(0, schema.properties().size()); } finally { - if (schemaFile.exists()) { - assertTrue(schemaFile.delete()); - } + FileUtils.deleteQuietly(schemaFile); } } @@ -389,9 +383,7 @@ public class TestSchemaCommands extends ClusterTest { assertEquals(0, schema.properties().size()); } finally { - if (schemaFile.exists()) { - assertTrue(schemaFile.delete()); - } + FileUtils.deleteQuietly(schemaFile); } } @@ -423,9 +415,7 @@ public class TestSchemaCommands extends ClusterTest { assertTrue(schema.isEmpty()); assertEquals("val", schema.property("prop")); } finally { - if (schemaFile.exists()) { - assertTrue(schemaFile.delete()); - } + FileUtils.deleteQuietly(schemaFile); } } @@ -474,9 +464,43 @@ public class TestSchemaCommands extends ClusterTest { assertEquals(2, schema.properties().size()); } finally { - if (rawSchema.exists()) { - assertTrue(rawSchema.delete()); - } + FileUtils.deleteQuietly(rawSchema); + FileUtils.deleteQuietly(schemaFile); + } + } + + @Test + public void testCreateUsingLoadEmptyFile() throws Exception { + File tmpDir = dirTestWatcher.getTmpDir(); + File rawSchema = new File(tmpDir, "raw_empty.schema"); + File schemaFile = new File(tmpDir, "schema_for_create_using_load_empty_file.schema"); + + try { + assertTrue(rawSchema.createNewFile()); + + testBuilder() + .sqlQuery("create schema load '%s' path '%s' properties ('k1'='v1', 'k2' = 'v2')", + rawSchema.getPath(), schemaFile.getPath()) + .unOrdered() + .baselineColumns("ok", "summary") + .baselineValues(true, String.format("Created schema for [%s]", schemaFile.getPath())) + .go(); + + SchemaProvider schemaProvider = new PathSchemaProvider(new Path(schemaFile.getPath())); + assertTrue(schemaFile.exists()); + + SchemaContainer schemaContainer = schemaProvider.read(); + + assertNull(schemaContainer.getTable()); + + TupleMetadata schema = schemaContainer.getSchema(); + assertNotNull(schema); + + assertEquals(0, schema.size()); + assertEquals(2, schema.properties().size()); + } finally { + FileUtils.deleteQuietly(rawSchema); + FileUtils.deleteQuietly(schemaFile); } } diff --git a/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaParser.g4 b/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaParser.g4 index 384daf8..3be11ca 100644 --- a/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaParser.g4 +++ b/exec/vector/src/main/antlr4/org/apache/drill/exec/record/metadata/schema/parser/SchemaParser.g4 @@ -25,7 +25,7 @@ options { */ } -schema: (columns | LEFT_PAREN columns? RIGHT_PAREN) property_values? EOF; +schema: (columns | LEFT_PAREN columns? RIGHT_PAREN | /* empty input */) property_values? EOF; columns: column_def (COMMA column_def)*; diff --git a/exec/vector/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java b/exec/vector/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java index 2d0d1be..5bb6cfb 100644 --- a/exec/vector/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java +++ b/exec/vector/src/test/java/org/apache/drill/exec/record/metadata/schema/parser/TestSchemaParser.java @@ -311,9 +311,17 @@ public class TestSchemaParser { @Test public void testEmptySchema() throws Exception { - String value = "()"; - TupleMetadata schema = SchemaExprParser.parseSchema(value); - assertEquals(0, schema.size()); + assertEquals(0, SchemaExprParser.parseSchema("").size()); + assertEquals(0, SchemaExprParser.parseSchema(" ").size()); + assertEquals(0, SchemaExprParser.parseSchema("\n").size()); + assertEquals(0, SchemaExprParser.parseSchema(" \n").size()); + } + + @Test + public void testEmptySchemaWithParentheses() throws Exception { + assertEquals(0, SchemaExprParser.parseSchema("()").size()); + assertEquals(0, SchemaExprParser.parseSchema("( )").size()); + assertEquals(0, SchemaExprParser.parseSchema("(\n)\n").size()); } @Test
