You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by ve...@apache.org on 2015/06/08 21:07:27 UTC

[2/5] drill git commit: DRILL-3215: Resolve the default subschema correctly in DESCRIBE command.

DRILL-3215: Resolve the default subschema correctly in DESCRIBE command.


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

Branch: refs/heads/master
Commit: eaf7c8d77058af58795862a0e0fd510b130f457c
Parents: 2af6340
Author: vkorukanti <ve...@gmail.com>
Authored: Fri May 29 08:57:40 2015 -0700
Committer: vkorukanti <ve...@gmail.com>
Committed: Fri Jun 5 07:49:54 2015 -0700

----------------------------------------------------------------------
 .../exec/hive/TestInfoSchemaOnHiveStorage.java  | 80 ++++++++++++++++++--
 .../sql/handlers/DescribeTableHandler.java      | 17 ++++-
 2 files changed, 88 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/eaf7c8d7/contrib/storage-hive/core/src/test/java/org/apache/drill/exec/hive/TestInfoSchemaOnHiveStorage.java
----------------------------------------------------------------------
diff --git a/contrib/storage-hive/core/src/test/java/org/apache/drill/exec/hive/TestInfoSchemaOnHiveStorage.java b/contrib/storage-hive/core/src/test/java/org/apache/drill/exec/hive/TestInfoSchemaOnHiveStorage.java
index d8ab5c0..a7bd8e2 100644
--- a/contrib/storage-hive/core/src/test/java/org/apache/drill/exec/hive/TestInfoSchemaOnHiveStorage.java
+++ b/contrib/storage-hive/core/src/test/java/org/apache/drill/exec/hive/TestInfoSchemaOnHiveStorage.java
@@ -17,9 +17,14 @@
  */
 package org.apache.drill.exec.hive;
 
+import com.google.common.base.Strings;
+import org.apache.drill.TestBuilder;
 import org.junit.Test;
 
 public class TestInfoSchemaOnHiveStorage extends HiveTestBase {
+  private static final String[] baselineCols = new String[] {"COLUMN_NAME", "DATA_TYPE", "IS_NULLABLE"};
+  private static final Object[] expVal1 = new Object[] {"key", "INTEGER", "YES"};
+  private static final Object[] expVal2 = new Object[] {"value", "VARCHAR", "YES"};
 
   @Test
   public void showTablesFromDb() throws Exception{
@@ -63,17 +68,78 @@ public class TestInfoSchemaOnHiveStorage extends HiveTestBase {
         .go();
   }
 
-  @Test
-  public void describeTableNullableColumns() throws Exception{
-    testBuilder()
-        .sqlQuery("DESCRIBE hive.`default`.kv")
+  private static void describeHelper(final String options, final String describeCmd) throws Exception {
+    final TestBuilder builder = testBuilder();
+
+    if (!Strings.isNullOrEmpty(options)) {
+      builder.optionSettingQueriesForTestQuery(options);
+    }
+
+    builder.sqlQuery(describeCmd)
         .unOrdered()
-        .baselineColumns("COLUMN_NAME", "DATA_TYPE", "IS_NULLABLE")
-        .baselineValues("key", "INTEGER", "YES")
-        .baselineValues("value", "VARCHAR", "YES")
+        .baselineColumns(baselineCols)
+        .baselineValues(expVal1)
+        .baselineValues(expVal2)
         .go();
   }
 
+  // When table name is fully qualified with schema name (sub-schema is default schema)
+  @Test
+  public void describeTable1() throws Exception{
+    describeHelper(null, "DESCRIBE hive.`default`.kv");
+  }
+
+  // When table name is fully qualified with schema name (sub-schema is non-default schema)
+  @Test
+  public void describeTable2() throws Exception{
+    describeHelper(null, "DESCRIBE hive.`db1`.kv_db1");
+  }
+
+  // When table is qualified with just the top level schema. It should look for the table in default sub-schema within
+  // the top level schema.
+  @Test
+  public void describeTable3() throws Exception {
+    describeHelper(null, "DESCRIBE hive.kv");
+  }
+
+  // When table name is qualified with multi-level schema (sub-schema is default schema) given as single level schema name.
+  @Test
+  public void describeTable4() throws Exception {
+    describeHelper(null, "DESCRIBE `hive.default`.kv");
+  }
+
+  // When table name is qualified with multi-level schema (sub-schema is non-default schema)
+  // given as single level schema name.
+  @Test
+  public void describeTable5() throws Exception {
+    describeHelper(null, "DESCRIBE `hive.db1`.kv_db1");
+  }
+
+  // When current default schema is just the top-level schema name and the table has no schema qualifier. It should
+  // look for the table in default sub-schema within the top level schema.
+  @Test
+  public void describeTable6() throws Exception {
+    describeHelper("USE hive", "DESCRIBE kv");
+  }
+
+  // When default schema is fully qualified with schema name and table is not qualified with a schema name
+  @Test
+  public void describeTable7() throws Exception {
+    describeHelper("USE hive.`default`", "DESCRIBE kv");
+  }
+
+  // When default schema is qualified with multi-level schema given as single level schema name.
+  @Test
+  public void describeTable8() throws Exception {
+    describeHelper("USE `hive.default`", "DESCRIBE kv");
+  }
+
+  // When default schema is top-level schema and table is qualified with sub-schema
+  @Test
+  public void describeTable9() throws Exception {
+    describeHelper("USE `hive`", "DESCRIBE `default`.kv");
+  }
+
   @Test
   public void varCharMaxLengthAndDecimalPrecisionInInfoSchema() throws Exception{
     final String query = "SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE " +

http://git-wip-us.apache.org/repos/asf/drill/blob/eaf7c8d7/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
index 81defa3..676dcba 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
@@ -62,12 +62,25 @@ public class DescribeTableHandler extends DefaultSqlHandler {
           ImmutableList.of(IS_SCHEMA_NAME, TAB_COLUMNS), null, SqlParserPos.ZERO, null);
 
       final SqlIdentifier table = node.getTable();
-      final SchemaPlus schema = SchemaUtilites.findSchema(context.getNewDefaultSchema(), Util.skipLast(table.names));
+      final SchemaPlus defaultSchema = context.getNewDefaultSchema();
+      final List<String> schemaPathGivenInCmd = Util.skipLast(table.names);
+      final SchemaPlus schema = SchemaUtilites.findSchema(defaultSchema, schemaPathGivenInCmd);
+
+      if (schema == null) {
+        SchemaUtilites.throwSchemaNotFoundException(defaultSchema,
+            SchemaUtilites.SCHEMA_PATH_JOINER.join(schemaPathGivenInCmd));
+      }
+
+      if (SchemaUtilites.isRootSchema(schema)) {
+        throw UserException.validationError()
+            .message("No schema selected.")
+            .build();
+      }
 
       final String tableName = Util.last(table.names);
 
       // find resolved schema path
-      final String schemaPath = SchemaUtilites.getSchemaPath(schema);
+      final String schemaPath = SchemaUtilites.unwrapAsDrillSchemaInstance(schema).getFullSchemaName();
 
       if (schema.getTable(tableName) == null) {
         throw UserException.validationError()