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

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


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 55a06fd57d4 branch-3.0: [fix](Nereids) simplify conditional function 
generate wrong nullable #44209 (#44334)
55a06fd57d4 is described below

commit 55a06fd57d4f37d73bfa8919f0cf13eec86b18db
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Nov 20 17:43:00 2024 +0800

    branch-3.0: [fix](Nereids) simplify conditional function generate wrong 
nullable #44209 (#44334)
    
    Cherry-picked from #44209
    
    Co-authored-by: morrySnow <zhangwen...@selectdb.com>
---
 .../rules/expression/rules/SimplifyConditionalFunction.java       | 3 ++-
 .../rules/expression/rules/SimplifyConditionalFunctionTest.java   | 8 +++++---
 .../simplify_conditional_function.out                             | 3 +++
 .../simplify_conditional_function.groovy                          | 2 ++
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunction.java
index 359cb887fe5..c1c6283e32d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunction.java
@@ -22,6 +22,7 @@ import 
org.apache.doris.nereids.rules.expression.ExpressionPatternRuleFactory;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Coalesce;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.NullIf;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.Nullable;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Nvl;
 import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
 
@@ -98,7 +99,7 @@ public class SimplifyConditionalFunction implements 
ExpressionPatternRuleFactory
      */
     private static Expression rewriteNullIf(NullIf nullIf) {
         if (nullIf.child(0) instanceof NullLiteral || nullIf.child(1) 
instanceof NullLiteral) {
-            return nullIf.child(0);
+            return new Nullable(nullIf.child(0));
         } else {
             return nullIf;
         }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunctionTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunctionTest.java
index 33c62f142c2..7ba9cf09ff2 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunctionTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyConditionalFunctionTest.java
@@ -22,6 +22,7 @@ import 
org.apache.doris.nereids.rules.expression.ExpressionRuleExecutor;
 import org.apache.doris.nereids.trees.expressions.SlotReference;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Coalesce;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.NullIf;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.Nullable;
 import org.apache.doris.nereids.trees.expressions.functions.scalar.Nvl;
 import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
 import org.apache.doris.nereids.types.BooleanType;
@@ -99,13 +100,14 @@ public class SimplifyConditionalFunctionTest extends 
ExpressionRewriteTestHelper
         SlotReference slot = new SlotReference("a", StringType.INSTANCE, true);
         SlotReference nonNullableSlot = new SlotReference("b", 
StringType.INSTANCE, false);
         // nullif(null, slot) -> null
-        assertRewrite(new NullIf(NullLiteral.INSTANCE, slot), new 
NullLiteral(VarcharType.SYSTEM_DEFAULT));
+        assertRewrite(new NullIf(NullLiteral.INSTANCE, slot),
+                new Nullable(new NullLiteral(VarcharType.SYSTEM_DEFAULT)));
 
         // nullif(nullable_slot, null) -> slot
-        assertRewrite(new NullIf(slot, NullLiteral.INSTANCE), slot);
+        assertRewrite(new NullIf(slot, NullLiteral.INSTANCE), new 
Nullable(slot));
 
         // nullif(non-nullable_slot, null) -> non-nullable_slot
-        assertRewrite(new NullIf(nonNullableSlot, NullLiteral.INSTANCE), 
nonNullableSlot);
+        assertRewrite(new NullIf(nonNullableSlot, NullLiteral.INSTANCE), new 
Nullable(nonNullableSlot));
     }
 
 }
diff --git 
a/regression-test/data/nereids_rules_p0/simplify_conditional_function/simplify_conditional_function.out
 
b/regression-test/data/nereids_rules_p0/simplify_conditional_function/simplify_conditional_function.out
index 91f9110804b..d9f4f3b3358 100644
--- 
a/regression-test/data/nereids_rules_p0/simplify_conditional_function/simplify_conditional_function.out
+++ 
b/regression-test/data/nereids_rules_p0/simplify_conditional_function/simplify_conditional_function.out
@@ -131,3 +131,6 @@ abc
 ab
 abc
 
+-- !test_nullable_nullif --
+1      1
+
diff --git 
a/regression-test/suites/nereids_rules_p0/simplify_conditional_function/simplify_conditional_function.groovy
 
b/regression-test/suites/nereids_rules_p0/simplify_conditional_function/simplify_conditional_function.groovy
index 18443bb152a..2b99ad0a23a 100644
--- 
a/regression-test/suites/nereids_rules_p0/simplify_conditional_function/simplify_conditional_function.groovy
+++ 
b/regression-test/suites/nereids_rules_p0/simplify_conditional_function/simplify_conditional_function.groovy
@@ -49,4 +49,6 @@ suite("simplify_conditional_function") {
     qt_test_outer_ref_coalesce "select c1 from (select coalesce(null,a,c) 
c1,a,b from test_simplify_conditional_function order by c1,a,b limit 2) t group 
by c1 order by c1"
     qt_test_outer_ref_nvl "select c1 from (select ifnull(null, c) c1 from 
test_simplify_conditional_function order by 1 limit 2) t group by c1 order by 
c1"
     qt_test_outer_ref_nullif "select c1 from (select nullif(a, null) c1,c from 
test_simplify_conditional_function order by c1,c limit 2 ) t group by c1 order 
by c1"
+
+    qt_test_nullable_nullif "SELECT COUNT( DISTINCT NULLIF ( 1, NULL ) ), 
COUNT( DISTINCT 72 )"
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to