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

Reply via email to