diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index e9bf3e4..857b83e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -2315,6 +2315,14 @@ private void subqueryRestrictionCheck(QB qb, ASTNode searchCond, RelNode srcRel, subQueryAST, "Only SubQuery expressions that are top level conjuncts are allowed")); } + ASTNode outerQueryExpr = (ASTNode) subQueryAST.getChild(2); + + if (outerQueryExpr != null && outerQueryExpr.getType() == HiveParser.TOK_SUBQUERY_EXPR ) { + + throw new CalciteSubquerySemanticException(ErrorMsg.UNSUPPORTED_SUBQUERY_EXPRESSION.getMsg( + outerQueryExpr, "IN/NOT IN subqueries are not allowed in LHS")); + } + QBSubQuery subQuery = SubQueryUtils.buildSubQuery(qb.getId(), sqIdx, subQueryAST, originalSubQueryAST, ctx); diff --git a/ql/src/test/queries/clientnegative/subquery_in_lhs.q b/ql/src/test/queries/clientnegative/subquery_in_lhs.q new file mode 100644 index 0000000..087c3f3 --- /dev/null +++ b/ql/src/test/queries/clientnegative/subquery_in_lhs.q @@ -0,0 +1,2 @@ + +select * from part where (select max(p_size) from part) IN (select p_size from part); \ No newline at end of file diff --git a/ql/src/test/results/clientnegative/subquery_in_lhs.q.out b/ql/src/test/results/clientnegative/subquery_in_lhs.q.out new file mode 100644 index 0000000..8cfdf55 --- /dev/null +++ b/ql/src/test/results/clientnegative/subquery_in_lhs.q.out @@ -0,0 +1 @@ +FAILED: SemanticException org.apache.hadoop.hive.ql.optimizer.calcite.CalciteSubquerySemanticException: Line 0:-1 Unsupported SubQuery Expression 'p_size': IN/NOT IN subqueries are not allowed in LHS diff --git a/ql/src/test/results/clientnegative/subquery_subquery_chain.q.out b/ql/src/test/results/clientnegative/subquery_subquery_chain.q.out index 448bfb2..e661e1b 100644 --- a/ql/src/test/results/clientnegative/subquery_subquery_chain.q.out +++ b/ql/src/test/results/clientnegative/subquery_subquery_chain.q.out @@ -1 +1 @@ -FAILED: SemanticException [Error 10249]: Line 5:59 Unsupported SubQuery Expression 'key': Only 1 SubQuery expression is supported. +FAILED: SemanticException [Error 10249]: org.apache.hadoop.hive.ql.optimizer.calcite.CalciteSubquerySemanticException: Line 5:14 Unsupported SubQuery Expression 'key': IN/NOT IN subqueries are not allowed in LHS diff --git a/ql/src/test/results/clientnegative/subquery_subquery_chain_exists.q.out b/ql/src/test/results/clientnegative/subquery_subquery_chain_exists.q.out index 0a79559..9b5212b 100644 --- a/ql/src/test/results/clientnegative/subquery_subquery_chain_exists.q.out +++ b/ql/src/test/results/clientnegative/subquery_subquery_chain_exists.q.out @@ -1 +1 @@ -FAILED: SemanticException [Error 10249]: Line 4:56 Unsupported SubQuery Expression 'key': Only 1 SubQuery expression is supported. +FAILED: SemanticException [Error 10249]: org.apache.hadoop.hive.ql.optimizer.calcite.CalciteSubquerySemanticException: Line 4:7 Unsupported SubQuery Expression 'key': IN/NOT IN subqueries are not allowed in LHS diff --git a/ql/src/test/results/clientpositive/perf/query23.q.out b/ql/src/test/results/clientpositive/perf/query23.q.out index 85cee23..59f2586 100644 --- a/ql/src/test/results/clientpositive/perf/query23.q.out +++ b/ql/src/test/results/clientpositive/perf/query23.q.out @@ -1,7 +1,7 @@ -Warning: Shuffle Join MERGEJOIN[379][tables = [$hdt$_1, $hdt$_2]] in Stage 'Reducer 19' is a cross product -Warning: Shuffle Join MERGEJOIN[380][tables = [$hdt$_1, $hdt$_2, $hdt$_0]] in Stage 'Reducer 20' is a cross product Warning: Shuffle Join MERGEJOIN[382][tables = [$hdt$_1, $hdt$_2]] in Stage 'Reducer 51' is a cross product Warning: Shuffle Join MERGEJOIN[383][tables = [$hdt$_1, $hdt$_2, $hdt$_0]] in Stage 'Reducer 52' is a cross product +Warning: Shuffle Join MERGEJOIN[379][tables = [$hdt$_1, $hdt$_2]] in Stage 'Reducer 19' is a cross product +Warning: Shuffle Join MERGEJOIN[380][tables = [$hdt$_1, $hdt$_2, $hdt$_0]] in Stage 'Reducer 20' is a cross product PREHOOK: query: explain with frequent_ss_items as (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date solddate,count(*) cnt from store_sales