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"); }
