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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]