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

yiguolei 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 8908a347bcc [fix](nereids)need do type coercion after simplify 
comparasion predicate (#29546)
8908a347bcc is described below

commit 8908a347bccaec88f47c1669cf809dee49cb163a
Author: starocean999 <40539150+starocean...@users.noreply.github.com>
AuthorDate: Sat Jan 6 13:34:04 2024 +0800

    [fix](nereids)need do type coercion after simplify comparasion predicate 
(#29546)
---
 .../rules/SimplifyComparisonPredicate.java           | 20 ++++++++++++--------
 .../rules/SimplifyComparisonPredicateTest.java       | 19 +++++++++++++++++++
 2 files changed, 31 insertions(+), 8 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicate.java
index ab72b023afa..03958f3d55f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicate.java
@@ -52,6 +52,7 @@ import org.apache.doris.nereids.types.DateType;
 import org.apache.doris.nereids.types.DateV2Type;
 import org.apache.doris.nereids.types.DecimalV3Type;
 import org.apache.doris.nereids.types.coercion.DateLikeType;
+import org.apache.doris.nereids.util.TypeCoercionUtils;
 
 import com.google.common.base.Preconditions;
 
@@ -285,18 +286,21 @@ public class SimplifyComparisonPredicate extends 
AbstractExpressionRewriteRule {
                     return BooleanLiteral.of(false);
                 } else if (comparisonPredicate instanceof GreaterThan
                         || comparisonPredicate instanceof LessThanEqual) {
-                    return comparisonPredicate.withChildren(left,
-                            convertDecimalToIntegerLikeLiteral(
-                                    literal.setScale(0, RoundingMode.FLOOR)));
+                    return TypeCoercionUtils
+                            .processComparisonPredicate((ComparisonPredicate) 
comparisonPredicate
+                                    .withChildren(left, 
convertDecimalToIntegerLikeLiteral(
+                                            literal.setScale(0, 
RoundingMode.FLOOR))));
                 } else if (comparisonPredicate instanceof LessThan
                         || comparisonPredicate instanceof GreaterThanEqual) {
-                    return comparisonPredicate.withChildren(left,
-                            convertDecimalToIntegerLikeLiteral(
-                                    literal.setScale(0, 
RoundingMode.CEILING)));
+                    return TypeCoercionUtils
+                            .processComparisonPredicate((ComparisonPredicate) 
comparisonPredicate
+                                    .withChildren(left, 
convertDecimalToIntegerLikeLiteral(
+                                            literal.setScale(0, 
RoundingMode.CEILING))));
                 }
             } else {
-                return comparisonPredicate.withChildren(left,
-                        convertDecimalToIntegerLikeLiteral(literal));
+                return TypeCoercionUtils
+                        .processComparisonPredicate((ComparisonPredicate) 
comparisonPredicate
+                                .withChildren(left, 
convertDecimalToIntegerLikeLiteral(literal)));
             }
         }
         return comparisonPredicate;
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicateTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicateTest.java
index f76683338c4..770f6622008 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicateTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rules/SimplifyComparisonPredicateTest.java
@@ -23,12 +23,16 @@ import org.apache.doris.nereids.trees.expressions.Cast;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.GreaterThan;
+import org.apache.doris.nereids.trees.expressions.GreaterThanEqual;
 import org.apache.doris.nereids.trees.expressions.LessThan;
+import org.apache.doris.nereids.trees.expressions.literal.BigIntLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.DateLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.DateTimeLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.DateTimeV2Literal;
 import org.apache.doris.nereids.trees.expressions.literal.DateV2Literal;
+import org.apache.doris.nereids.trees.expressions.literal.DoubleLiteral;
 import org.apache.doris.nereids.types.DateTimeV2Type;
+import org.apache.doris.nereids.types.DoubleType;
 
 import com.google.common.collect.ImmutableList;
 import org.junit.jupiter.api.Assertions;
@@ -118,4 +122,19 @@ class SimplifyComparisonPredicateTest extends 
ExpressionRewriteTestHelper {
         // right should round to be 2021-01-02 00:00:00.00
         Assertions.assertEquals(new DateTimeV2Literal("2021-01-02 00:00:00"), 
rewrittenExpression.child(1));
     }
+
+    @Test
+    void testDoubleLiteral() {
+        executor = new ExpressionRuleExecutor(
+                ImmutableList.of(SimplifyComparisonPredicate.INSTANCE));
+
+        Expression leftChild = new BigIntLiteral(999);
+        Expression left = new Cast(leftChild, DoubleType.INSTANCE);
+        Expression right = new DoubleLiteral(111);
+
+        Expression expression = new GreaterThanEqual(left, right);
+        Expression rewrittenExpression = executor.rewrite(expression, context);
+        Assertions.assertEquals(left.child(0).getDataType(), 
rewrittenExpression.child(1).getDataType());
+        Assertions.assertEquals(rewrittenExpression.child(0).getDataType(), 
rewrittenExpression.child(1).getDataType());
+    }
 }


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

Reply via email to