DRILL-666: Show Tables should only list tables in the current database.

If no default database in selected throw an error to select a
default database using USE command.


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

Branch: refs/heads/master
Commit: 9b827b5700e91f498d165632a9fdca05f13d98d9
Parents: 299d1bf
Author: vkorukanti <[email protected]>
Authored: Mon Jun 9 16:40:17 2014 -0700
Committer: vkorukanti <[email protected]>
Committed: Mon Jun 9 16:45:38 2014 -0700

----------------------------------------------------------------------
 .../planner/sql/handlers/ShowTablesHandler.java | 33 +++++++++++++++++---
 .../apache/drill/jdbc/test/TestMetadataDDL.java | 16 +++-------
 2 files changed, 32 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/9b827b57/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
index 6905c17..2ee36d9 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
@@ -20,11 +20,13 @@ package org.apache.drill.exec.planner.sql.handlers;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
+import net.hydromatic.optiq.SchemaPlus;
 import net.hydromatic.optiq.tools.Planner;
 import net.hydromatic.optiq.tools.RelConversionException;
 import org.apache.drill.exec.ops.QueryContext;
 import org.apache.drill.exec.planner.sql.parser.DrillParserUtil;
 import org.apache.drill.exec.planner.sql.parser.SqlShowTables;
+import org.apache.drill.exec.store.AbstractSchema;
 import org.eigenbase.sql.*;
 import org.eigenbase.sql.fun.SqlStdOperatorTable;
 import org.eigenbase.sql.parser.SqlParserPos;
@@ -43,7 +45,7 @@ public class ShowTablesHandler extends DefaultSqlHandler {
     SqlShowTables node = unwrap(sqlNode, SqlShowTables.class);
     List<SqlNode> selectList = Lists.newArrayList();
     SqlNode fromClause;
-    SqlNode where = null;
+    SqlNode where;
 
     // create select columns
     selectList.add(new SqlIdentifier("TABLE_SCHEMA", SqlParserPos.ZERO));
@@ -52,13 +54,34 @@ public class ShowTablesHandler extends DefaultSqlHandler {
     fromClause = new SqlIdentifier(ImmutableList.of("INFORMATION_SCHEMA", 
"TABLES"), SqlParserPos.ZERO);
 
     final SqlIdentifier db = node.getDb();
+    String tableSchema;
     if (db != null) {
-      where = DrillParserUtil.createCondition(
-          new SqlIdentifier("TABLE_SCHEMA", SqlParserPos.ZERO),
-          SqlStdOperatorTable.EQUALS,
-          SqlLiteral.createCharString(db.toString(), CHARSET, 
db.getParserPosition()));
+      tableSchema = db.toString();
+    } else {
+      // If no schema is given in SHOW TABLES command, list tables from 
current schema
+      SchemaPlus schema = context.getNewDefaultSchema();
+
+      if (isRootSchema(schema)) {
+        // If the default schema is a root schema, throw an error to select a 
default schema
+        throw new RelConversionException("No schema selected. Select a schema 
using 'USE schema' command");
+      }
+
+      AbstractSchema drillSchema;
+
+      try {
+        drillSchema = getDrillSchema(schema);
+      } catch(Exception ex) {
+        throw new RelConversionException("Error while rewriting SHOW TABLES 
query: " + ex.getMessage(), ex);
+      }
+
+      tableSchema = drillSchema.getFullSchemaName();
     }
 
+    where = DrillParserUtil.createCondition(
+        new SqlIdentifier("TABLE_SCHEMA", SqlParserPos.ZERO),
+        SqlStdOperatorTable.EQUALS,
+        SqlLiteral.createCharString(tableSchema, CHARSET, SqlParserPos.ZERO));
+
     SqlNode filter = null;
     final SqlNode likePattern = node.getLikePattern();
     if (likePattern != null) {

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/9b827b57/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestMetadataDDL.java
----------------------------------------------------------------------
diff --git 
a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestMetadataDDL.java 
b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestMetadataDDL.java
index 06a671d..95af9f8 100644
--- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestMetadataDDL.java
+++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/TestMetadataDDL.java
@@ -46,19 +46,11 @@ public class TestMetadataDDL extends TestJdbcQuery {
 
   @Test
   public void testShowTables() throws Exception{
-    JdbcAssert.withNoDefaultSchema()
+    JdbcAssert.withFull("hive.default")
         .sql("SHOW TABLES")
         .returns(
             "TABLE_SCHEMA=hive.default; TABLE_NAME=kv\n" +
-            "TABLE_SCHEMA=hive.default; TABLE_NAME=foodate\n" +
-            "TABLE_SCHEMA=hive.db1; TABLE_NAME=kv_db1\n" +
-            "TABLE_SCHEMA=sys; TABLE_NAME=drillbits\n" +
-            "TABLE_SCHEMA=sys; TABLE_NAME=options\n" +
-            "TABLE_SCHEMA=INFORMATION_SCHEMA; TABLE_NAME=VIEWS\n" +
-            "TABLE_SCHEMA=INFORMATION_SCHEMA; TABLE_NAME=COLUMNS\n" +
-            "TABLE_SCHEMA=INFORMATION_SCHEMA; TABLE_NAME=TABLES\n" +
-            "TABLE_SCHEMA=INFORMATION_SCHEMA; TABLE_NAME=CATALOGS\n" +
-            "TABLE_SCHEMA=INFORMATION_SCHEMA; TABLE_NAME=SCHEMATA\n"
+            "TABLE_SCHEMA=hive.default; TABLE_NAME=foodate\n"
         );
   }
 
@@ -74,7 +66,7 @@ public class TestMetadataDDL extends TestJdbcQuery {
             "TABLE_SCHEMA=INFORMATION_SCHEMA; TABLE_NAME=SCHEMATA\n"
         );
 
-    JdbcAssert.withNoDefaultSchema()
+    JdbcAssert.withFull("dfs.tmp")
         .sql("SHOW TABLES IN hive.`default`")
         .returns(
             "TABLE_SCHEMA=hive.default; TABLE_NAME=kv\n" +
@@ -90,7 +82,7 @@ public class TestMetadataDDL extends TestJdbcQuery {
 
   @Test
   public void testShowTablesLike() throws Exception{
-    JdbcAssert.withNoDefaultSchema()
+    JdbcAssert.withFull("INFORMATION_SCHEMA")
         .sql("SHOW TABLES LIKE '%CH%'")
         .returns("TABLE_SCHEMA=INFORMATION_SCHEMA; TABLE_NAME=SCHEMATA\n");
   }

Reply via email to