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 dcdc81844f [fix](nereids)use same decimalv3 type for params and return 
types (#20101)
dcdc81844f is described below

commit dcdc81844f5016cb31011beccff7ccc644e3b3bc
Author: starocean999 <40539150+starocean...@users.noreply.github.com>
AuthorDate: Fri May 26 20:15:51 2023 +0800

    [fix](nereids)use same decimalv3 type for params and return types (#20101)
---
 .../main/java/org/apache/doris/analysis/ArithmeticExpr.java  | 12 ++++++++++--
 .../java/org/apache/doris/nereids/trees/expressions/Mod.java |  4 +++-
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
index c863f06194..4bf92c6c4b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
@@ -512,8 +512,16 @@ public class ArithmeticExpr extends Expr {
                     }
                     castChild(ScalarType.createDecimalV3Type(precision, 
targetScale), 0);
                 } else if (op == Operator.MOD) {
-                    castChild(type, 0);
-                    castChild(type, 1);
+                    // TODO use max int part + max scale of two operands as 
result type
+                    // because BE require the result and operands types are 
the exact the same decimalv3 type
+                    precision = Math.max(widthOfIntPart1, widthOfIntPart2) + 
scale;
+                    if (precision > ScalarType.MAX_DECIMAL128_PRECISION) {
+                        type = castBinaryOp(Type.DOUBLE);
+                    } else {
+                        type = ScalarType.createDecimalV3Type(precision, 
scale);
+                        castChild(type, 0);
+                        castChild(type, 1);
+                    }
                 }
                 break;
             case INT_DIVIDE:
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Mod.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Mod.java
index f7e1443f39..8154d4afbc 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Mod.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Mod.java
@@ -44,8 +44,10 @@ public class Mod extends BinaryArithmetic implements 
AlwaysNullable {
 
     @Override
     public DecimalV3Type getDataTypeForDecimalV3(DecimalV3Type t1, 
DecimalV3Type t2) {
+        // TODO use max int part + max scale of two operands as result type
+        // because BE require the result and operands types are the exact the 
same decimalv3 type
         int scale = Math.max(t1.getScale(), t2.getScale());
-        int precision = t2.getRange() + scale;
+        int precision = Math.max(t1.getRange(), t2.getRange()) + scale;
         return DecimalV3Type.createDecimalV3Type(precision, scale);
     }
 


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

Reply via email to