diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java index 18de383e5f..dc84c98d26 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/QB.java @@ -456,4 +456,11 @@ public boolean containsQueryWithoutSourceTable() { } return aliasToTabs.size()==0 && aliasToSubq.size()==0; } + + // returns false when the query block doesn't have + // a table defined, e.g. "select 5" + public boolean hasTableDefined() { + return !(aliases.size() == 1 && aliases.get(0).equals(SemanticAnalyzer.DUMMY_TABLE)); + } + } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 3313766ee4..3350a9fd20 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -14094,6 +14094,10 @@ private void validateCreateView() } } + if (createVwDesc.isMaterialized() && !qb.hasTableDefined()) { + throw new SemanticException("Materialized view must have a table defined."); + } + if (createVwDesc.isMaterialized() && createVwDesc.isRewriteEnabled()) { if (!ctx.isCboSucceeded()) { String msg = "Cannot enable automatic rewriting for materialized view."; diff --git a/ql/src/test/queries/clientnegative/materialized_view_no_tbl.q b/ql/src/test/queries/clientnegative/materialized_view_no_tbl.q new file mode 100644 index 0000000000..91ceea91fe --- /dev/null +++ b/ql/src/test/queries/clientnegative/materialized_view_no_tbl.q @@ -0,0 +1,4 @@ +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +create materialized view cmv_no_tbl_as AS select 5; diff --git a/ql/src/test/results/clientnegative/materialized_view_no_tbl.q.out b/ql/src/test/results/clientnegative/materialized_view_no_tbl.q.out new file mode 100644 index 0000000000..8de568e47a --- /dev/null +++ b/ql/src/test/results/clientnegative/materialized_view_no_tbl.q.out @@ -0,0 +1 @@ +FAILED: SemanticException Materialized view must have a table defined.