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]

Reply via email to