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