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 d58aafb32d1 branch-3.0: [fix](Nereids) simplify comparison predicate
do wrong cast #44054 (#44107)
d58aafb32d1 is described below
commit d58aafb32d1a21c78d39f400dcbd44d8c1ba2869
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Nov 18 14:01:05 2024 +0800
branch-3.0: [fix](Nereids) simplify comparison predicate do wrong cast
#44054 (#44107)
Cherry-picked from #44054
Co-authored-by: morrySnow <[email protected]>
---
.../expression/rules/SimplifyComparisonPredicate.java | 15 +++++++--------
.../expression/rules/SimplifyComparisonPredicateTest.java | 12 ++++++++++++
2 files changed, 19 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 cc1694575ec..cb617958652 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
@@ -229,15 +229,15 @@ public class SimplifyComparisonPredicate extends
AbstractExpressionRewriteRule i
left = cast.child();
DecimalV3Literal literal = (DecimalV3Literal) right;
if (left.getDataType().isDecimalV3Type()) {
- if (((DecimalV3Type) left.getDataType())
- .getScale() < ((DecimalV3Type)
literal.getDataType()).getScale()) {
+ DecimalV3Type leftType = (DecimalV3Type) left.getDataType();
+ DecimalV3Type literalType = (DecimalV3Type)
literal.getDataType();
+ if (leftType.getScale() < literalType.getScale()) {
int toScale = ((DecimalV3Type)
left.getDataType()).getScale();
if (comparisonPredicate instanceof EqualTo) {
try {
return
TypeCoercionUtils.processComparisonPredicate((ComparisonPredicate)
- comparisonPredicate.withChildren(left,
- new
DecimalV3Literal((DecimalV3Type) left.getDataType(),
-
literal.getValue().setScale(toScale, RoundingMode.UNNECESSARY))));
+ comparisonPredicate.withChildren(left, new
DecimalV3Literal(
+
literal.getValue().setScale(toScale, RoundingMode.UNNECESSARY))));
} catch (ArithmeticException e) {
if (left.nullable()) {
// TODO: the ideal way is to return an If expr
like:
@@ -255,9 +255,8 @@ public class SimplifyComparisonPredicate extends
AbstractExpressionRewriteRule i
} else if (comparisonPredicate instanceof NullSafeEqual) {
try {
return
TypeCoercionUtils.processComparisonPredicate((ComparisonPredicate)
- comparisonPredicate.withChildren(left,
- new
DecimalV3Literal((DecimalV3Type) left.getDataType(),
-
literal.getValue().setScale(toScale, RoundingMode.UNNECESSARY))));
+ comparisonPredicate.withChildren(left, new
DecimalV3Literal(
+
literal.getValue().setScale(toScale, RoundingMode.UNNECESSARY))));
} catch (ArithmeticException e) {
return BooleanLiteral.of(false);
}
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 402594d6861..84ebd7c7250 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
@@ -279,5 +279,17 @@ class SimplifyComparisonPredicateTest extends
ExpressionRewriteTestHelper {
rewrittenExpression.child(0).getDataType());
Assertions.assertInstanceOf(DecimalV3Literal.class,
rewrittenExpression.child(1));
Assertions.assertEquals(new BigDecimal("12.35"), ((DecimalV3Literal)
rewrittenExpression.child(1)).getValue());
+
+ // left's child range smaller than right literal
+ leftChild = new DecimalV3Literal(new BigDecimal("1234.12"));
+ left = new Cast(leftChild, DecimalV3Type.createDecimalV3Type(10, 5));
+ right = new DecimalV3Literal(new BigDecimal("12345.12000"));
+ expression = new EqualTo(left, right);
+ rewrittenExpression = executor.rewrite(expression, context);
+ Assertions.assertInstanceOf(Cast.class, rewrittenExpression.child(0));
+ Assertions.assertEquals(DecimalV3Type.createDecimalV3Type(7, 2),
+ rewrittenExpression.child(0).getDataType());
+ Assertions.assertInstanceOf(DecimalV3Literal.class,
rewrittenExpression.child(1));
+ Assertions.assertEquals(new BigDecimal("12345.12"),
((DecimalV3Literal) rewrittenExpression.child(1)).getValue());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]