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 <zhangwen...@selectdb.com> --- .../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: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org