This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new c23ab25474e [fix](nereids)keep equal predicate as join conjunct even 
if it can be fold to null literal (#35842)
c23ab25474e is described below

commit c23ab25474e35b58c9b8f8b643f0f3a560b1f714
Author: starocean999 <[email protected]>
AuthorDate: Tue Jun 4 14:46:58 2024 +0800

    [fix](nereids)keep equal predicate as join conjunct even if it can be fold 
to null literal (#35842)
    
    pick from master https://github.com/apache/doris/pull/35811
    
    ## Proposed changes
    
    Issue Number: close #xxx
    
    <!--Describe your changes.-->
---
 .../org/apache/doris/nereids/rules/expression/ExpressionRewrite.java | 5 +++++
 regression-test/data/nereids_p0/join/test_mark_join.out              | 3 +++
 regression-test/suites/nereids_p0/join/test_mark_join.groovy         | 2 ++
 3 files changed, 10 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java
index b547f693a7c..0eb4d3a79a0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java
@@ -25,6 +25,7 @@ import org.apache.doris.nereids.rules.Rule;
 import org.apache.doris.nereids.rules.RuleType;
 import org.apache.doris.nereids.rules.rewrite.OneRewriteRuleFactory;
 import org.apache.doris.nereids.rules.rewrite.RewriteRuleFactory;
+import org.apache.doris.nereids.trees.expressions.EqualPredicate;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
 import org.apache.doris.nereids.trees.expressions.functions.Function;
@@ -206,6 +207,10 @@ public class ExpressionRewrite implements 
RewriteRuleFactory {
             ImmutableList.Builder<Expression> rewrittenConjuncts = new 
ImmutableList.Builder<>();
             for (Expression expr : conjuncts) {
                 Expression newExpr = rewriter.rewrite(expr, context);
+                newExpr = newExpr.isNullLiteral() && expr instanceof 
EqualPredicate
+                                ? 
expr.withChildren(rewriter.rewrite(expr.child(0), context),
+                                        rewriter.rewrite(expr.child(1), 
context))
+                                : newExpr;
                 isChanged = isChanged || !newExpr.equals(expr);
                 
rewrittenConjuncts.addAll(ExpressionUtils.extractConjunction(newExpr));
             }
diff --git a/regression-test/data/nereids_p0/join/test_mark_join.out 
b/regression-test/data/nereids_p0/join/test_mark_join.out
index 1ab6bcce40e..59fc7d651ad 100644
--- a/regression-test/data/nereids_p0/join/test_mark_join.out
+++ b/regression-test/data/nereids_p0/join/test_mark_join.out
@@ -50,3 +50,6 @@
 2      q       5
 0              6
 
+-- !mark_join_null_conjunct --
+\N
+
diff --git a/regression-test/suites/nereids_p0/join/test_mark_join.groovy 
b/regression-test/suites/nereids_p0/join/test_mark_join.groovy
index e951ea15577..3b07c357b5d 100644
--- a/regression-test/suites/nereids_p0/join/test_mark_join.groovy
+++ b/regression-test/suites/nereids_p0/join/test_mark_join.groovy
@@ -140,4 +140,6 @@ suite("test_mark_join", "nereids_p0") {
             WHERE EXISTS ( SELECT MIN(`pk`) FROM 
table_7_undef_partitions2_keys3_properties4_distributed_by5 AS t2 WHERE t1.pk = 
6 ) 
             OR EXISTS ( SELECT `pk` FROM 
table_7_undef_partitions2_keys3_properties4_distributed_by5 AS t2 WHERE t1.pk = 
5 ) order by pk ;
     """
+
+    qt_mark_join_null_conjunct """select null in ( select k1 from 
test_mark_join_t1);"""
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to