diff options
3 files changed, 28 insertions, 2 deletions
diff --git a/distribution/src/resources/drill-override-example.conf b/distribution/src/resources/drill-override-example.conf index 3baac5e2b..43f9942ba 100644 --- a/distribution/src/resources/drill-override-example.conf +++ b/distribution/src/resources/drill-override-example.conf @@ -185,8 +185,7 @@ drill.exec: { root: "/app/drill" } }, - # Settings for Temporary Tables. - # See https://gist.github.com/arina-ielchiieva/50158175867a18eee964b5ba36455fbf#file-temporarytablessupport-md. + # Settings for Temporary Tables (see https://issues.apache.org/jira/browse/DRILL-4956 for details). # Temporary table can be created ONLY in default temporary workspace. # Full workspace name should be indicated (including schema and workspace separated by dot). # Workspace MUST be file-based and writable. Workspace name is case-sensitive. diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java index 28196c112..d20fc060e 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlConverter.java @@ -333,6 +333,7 @@ public class SqlConverter { } private RelNode expandView(String queryString, SqlConverter converter) { + converter.disallowTemporaryTables(); final SqlNode parsedNode = converter.parse(queryString); final SqlNode validatedNode = converter.validate(parsedNode); return converter.toRel(validatedNode); diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestCTTAS.java b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestCTTAS.java index 93c8cad3c..5d83beb26 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestCTTAS.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestCTTAS.java @@ -338,6 +338,32 @@ public class TestCTTAS extends BaseTestQuery { } } + @Test(expected = UserRemoteException.class) + public void testTemporaryTablesInViewExpansionLogic() throws Exception { + String tableName = "table_for_expansion_logic_test"; + String viewName = "view_for_expansion_logic_test"; + test("use %s", TEMP_SCHEMA); + test("create table %s as select 'TABLE' as c1 from (values(1))", tableName); + test("create view %s as select * from %s", viewName, tableName); + + testBuilder() + .sqlQuery("select * from %s", viewName) + .unOrdered() + .baselineColumns("c1") + .baselineValues("TABLE") + .go(); + + test("drop table %s", tableName); + test("create temporary table %s as select 'TEMP' as c1 from (values(1))", tableName); + try { + test("select * from %s", viewName); + } catch (UserRemoteException e) { + assertThat(e.getMessage(), containsString(String.format( + "VALIDATION ERROR: Temporary tables usage is disallowed. Used temporary table name: [%s]", tableName))); + throw e; + } + } + @Test public void testManualDropWithoutSchema() throws Exception { String temporaryTableName = "temporary_table_to_drop_without_schema"; |