diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java b/presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java index 6a794763e1eec..caa4acb5e6baa 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java @@ -46,6 +46,7 @@ import com.facebook.presto.spi.PrestoWarning; import com.facebook.presto.spi.SchemaTableName; import com.facebook.presto.spi.StandardErrorCode; +import com.facebook.presto.spi.StandardWarningCode; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.WarningCollector; import com.facebook.presto.spi.analyzer.AccessControlInfoForTable; @@ -763,6 +764,9 @@ protected Scope visitCreateTableAsSelect(CreateTableAsSelect node, Optional selectItems = analysis.getOutputExpressions(querySpec); - if (!context.prunable) { - // Examine all the output expressions - for (Expression expression : selectItems) { - process(expression, context); + // selectItems can be null for statements like CREATE TABLE IF NOT EXISTS when the table already exists + if (selectItems != null) { + if (!context.prunable) { + // Examine all the output expressions + for (Expression expression : selectItems) { + process(expression, context); + } } - } - else { - // Prune (Only examine output expressions that have been referenced) - for (FieldId fieldId : context.getFieldIdsToExploreInRelation(querySpec)) { - process(selectItems.get(fieldId.getFieldIndex()), context); + else { + // Prune (Only examine output expressions that have been referenced) + for (FieldId fieldId : context.getFieldIdsToExploreInRelation(querySpec)) { + process(selectItems.get(fieldId.getFieldIndex()), context); + } } } diff --git a/presto-main-base/src/test/java/com/facebook/presto/sql/analyzer/TestAnalyzer.java b/presto-main-base/src/test/java/com/facebook/presto/sql/analyzer/TestAnalyzer.java index c3236d3e6627a..eeef49e6805f5 100644 --- a/presto-main-base/src/test/java/com/facebook/presto/sql/analyzer/TestAnalyzer.java +++ b/presto-main-base/src/test/java/com/facebook/presto/sql/analyzer/TestAnalyzer.java @@ -125,6 +125,13 @@ private static void assertNoWarning(WarningCollector warningCollector) assertTrue(warnings.isEmpty()); } + @Test + public void testCTASIfNotExistsWhenExists() + { + assertHasWarning(analyzeWithWarnings("CREATE TABLE IF NOT EXISTS t1 AS SELECT a, b FROM t1"), + SEMANTIC_WARNING, "Table 'tpch.s1.t1' already exists, skipping table creation"); + } + @Test public void testNonComparableGroupBy() {