This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new ef53a27887 [fix](nereids) allow in or exits subquery in binary
operator (#22391)
ef53a27887 is described below
commit ef53a27887970cab714c80dbc886db839ecbb8fa
Author: starocean999 <[email protected]>
AuthorDate: Fri Aug 4 15:35:19 2023 +0800
[fix](nereids) allow in or exits subquery in binary operator (#22391)
support subquery in binary operator like if( xx in ( subquery ), 1, 0 )
---
.../nereids/rules/analysis/SubExprAnalyzer.java | 9 -------
.../sub_query_diff_old_optimize.out | 30 ++++++++++++++++++++++
.../sub_query_diff_old_optimize.groovy | 12 ++-------
3 files changed, 32 insertions(+), 19 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubExprAnalyzer.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubExprAnalyzer.java
index 9b323b5ba4..e39ebecaa0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubExprAnalyzer.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/SubExprAnalyzer.java
@@ -21,7 +21,6 @@ import org.apache.doris.nereids.CascadesContext;
import org.apache.doris.nereids.analyzer.Scope;
import org.apache.doris.nereids.exceptions.AnalysisException;
import org.apache.doris.nereids.trees.expressions.BinaryOperator;
-import org.apache.doris.nereids.trees.expressions.ComparisonPredicate;
import org.apache.doris.nereids.trees.expressions.Exists;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.InSubquery;
@@ -104,14 +103,6 @@ class SubExprAnalyzer extends
DefaultExpressionRewriter<CascadesContext> {
return new ScalarSubquery(analyzedResult.getLogicalPlan(),
analyzedResult.getCorrelatedSlots());
}
- @Override
- public Expression visitBinaryOperator(BinaryOperator binaryOperator,
CascadesContext context) {
- if (childrenAtLeastOneInOrExistsSub(binaryOperator) && (binaryOperator
instanceof ComparisonPredicate)) {
- throw new AnalysisException("Not support binaryOperator children
at least one is in or exists subquery");
- }
- return visit(binaryOperator, context);
- }
-
private boolean childrenAtLeastOneInOrExistsSub(BinaryOperator
binaryOperator) {
return binaryOperator.left().anyMatch(InSubquery.class::isInstance)
|| binaryOperator.left().anyMatch(Exists.class::isInstance)
diff --git
a/regression-test/data/nereids_syntax_p0/sub_query_diff_old_optimize.out
b/regression-test/data/nereids_syntax_p0/sub_query_diff_old_optimize.out
index 91b55d0c89..aad0c33b5b 100644
--- a/regression-test/data/nereids_syntax_p0/sub_query_diff_old_optimize.out
+++ b/regression-test/data/nereids_syntax_p0/sub_query_diff_old_optimize.out
@@ -1,4 +1,34 @@
-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !alias_scalar --
+1 2
+1 3
+
+-- !alias_in --
+3 3
+
+-- !alias_not_in --
+1 2
+1 3
+2 4
+2 5
+3 4
+20 2
+22 3
+24 4
+
+-- !alias_exist --
+1 2
+1 3
+2 4
+3 3
+3 4
+20 2
+22 3
+24 4
+
+-- !alias_not_exist --
+2 5
+
-- !exists_subquery_with_limit --
1 2
1 3
diff --git
a/regression-test/suites/nereids_syntax_p0/sub_query_diff_old_optimize.groovy
b/regression-test/suites/nereids_syntax_p0/sub_query_diff_old_optimize.groovy
index 3b16b32a61..6327b6c8aa 100644
---
a/regression-test/suites/nereids_syntax_p0/sub_query_diff_old_optimize.groovy
+++
b/regression-test/suites/nereids_syntax_p0/sub_query_diff_old_optimize.groovy
@@ -120,7 +120,7 @@ suite ("sub_query_diff_old_optimize") {
//----------with subquery alias----------
//----------remove temporarily-----------
- /*qt_alias_scalar """
+ qt_alias_scalar """
select * from sub_query_diff_old_optimize_subquery1
where sub_query_diff_old_optimize_subquery1.k1 < (select max(aa)
from
(select k1 as aa from sub_query_diff_old_optimize_subquery3
where sub_query_diff_old_optimize_subquery1.k2 =
sub_query_diff_old_optimize_subquery3.v2)
sub_query_diff_old_optimize_subquery3) order by k1, k2
@@ -148,7 +148,7 @@ suite ("sub_query_diff_old_optimize") {
select * from sub_query_diff_old_optimize_subquery1
where not exists (select aa from
(select k1 as aa from sub_query_diff_old_optimize_subquery3
where sub_query_diff_old_optimize_subquery1.k2 =
sub_query_diff_old_optimize_subquery3.v2)
sub_query_diff_old_optimize_subquery3) order by k1, k2
- """*/
+ """
//----------subquery with limit----------
order_qt_exists_subquery_with_limit """
@@ -176,12 +176,4 @@ suite ("sub_query_diff_old_optimize") {
exception "java.sql.SQLException: errCode = 2, detailMessage =
Unexpected exception: scalar subquery's correlatedPredicates's operator must be
EQ"
}
-
- test {
- sql """
- SELECT * FROM sub_query_diff_old_optimize_subquery1 WHERE (k1 IN
(SELECT k1 FROM sub_query_diff_old_optimize_subquery3) OR k1 < 10) != true;
- """
- exception "java.sql.SQLException: errCode = 2, detailMessage =
Unexpected exception: Not support binaryOperator children at least one is in or
exists subquery"
-
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]