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