This is an automated email from the ASF dual-hosted git repository.

morrysnow 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 60231454cc [fix](nereids) fix bug in multiply return data type (#15949)
60231454cc is described below

commit 60231454cc319884109b9e9b01bffbd3a3d126b0
Author: minghong <engle...@gmail.com>
AuthorDate: Fri Jan 20 11:44:24 2023 +0800

    [fix](nereids) fix bug in multiply return data type (#15949)
---
 .../doris/nereids/trees/expressions/Multiply.java  |  8 ++++++-
 .../doris/nereids/util/TypeCoercionUtils.java      |  4 +++-
 .../rules/expression/rewrite/FoldConstantTest.java |  2 +-
 .../data/nereids_datev2_p1/tpch/q14.out            |  4 ++--
 regression-test/data/nereids_tpch_p1/tpch/q14.out  |  4 ++--
 .../suites/nereids_syntax_p0/test_join3.groovy     |  6 ++---
 .../suites/nereids_syntax_p0/using_join.groovy     | 28 +++++++++++-----------
 7 files changed, 32 insertions(+), 24 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Multiply.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Multiply.java
index 818e8a43cd..bd91f3449e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Multiply.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Multiply.java
@@ -22,6 +22,7 @@ import 
org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
 import org.apache.doris.nereids.types.DataType;
 import org.apache.doris.nereids.types.coercion.AbstractDataType;
 import org.apache.doris.nereids.types.coercion.NumericType;
+import org.apache.doris.nereids.util.TypeCoercionUtils;
 
 import com.google.common.base.Preconditions;
 
@@ -44,7 +45,12 @@ public class Multiply extends BinaryArithmetic {
 
     @Override
     public DataType getDataType() {
-        return left().getDataType().promotion();
+        DataType rightType = child(0).getDataType();
+        DataType leftType = child(1).getDataType();
+        DataType outputType = TypeCoercionUtils.findTightestCommonType(this,
+                rightType, leftType).orElseGet(() -> rightType);
+        outputType = outputType.promotion();
+        return outputType;
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java
index b3f6733c47..b35fbd9fca 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java
@@ -214,7 +214,7 @@ public class TypeCoercionUtils {
         } else if (left instanceof CharacterType && right instanceof 
CharacterType) {
             tightestCommonType = 
CharacterType.widerCharacterType((CharacterType) left, (CharacterType) right);
         } else if (left instanceof CharacterType && right instanceof 
DateLikeType
-                    || left instanceof DateLikeType && right instanceof 
CharacterType) {
+                || left instanceof DateLikeType && right instanceof 
CharacterType) {
             // TODO: need check implicitCastMap to keep the behavior 
consistent with old optimizer
             tightestCommonType = right;
         } else if (left instanceof CharacterType || right instanceof 
CharacterType) {
@@ -259,6 +259,8 @@ public class TypeCoercionUtils {
                 //do not upgrade data type, keep Float
                 tightestCommonType = FloatType.INSTANCE;
             }
+        } else if (left instanceof DecimalV2Type && right instanceof 
DecimalV2Type) {
+            tightestCommonType = 
DecimalV2Type.widerDecimalV2Type((DecimalV2Type) left, (DecimalV2Type) right);
         } else if (canCompareDate(left, right)) {
             if (binaryOperator instanceof BinaryArithmetic) {
                 tightestCommonType = IntegerType.INSTANCE;
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rewrite/FoldConstantTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rewrite/FoldConstantTest.java
index d0d86a3559..394c97da1a 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rewrite/FoldConstantTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rewrite/FoldConstantTest.java
@@ -120,7 +120,7 @@ public class FoldConstantTest extends 
ExpressionRewriteTestHelper {
     }
 
     @Test
-    public void testNotFold() {
+    public void testNotPredicateFold() {
         executor = new 
ExpressionRuleExecutor(ImmutableList.of(TypeCoercion.INSTANCE, 
FoldConstantRuleOnFE.INSTANCE));
         assertRewriteAfterTypeCoercion("not 1 > 2", "true");
         assertRewriteAfterTypeCoercion("not null + 1 > 2", "null");
diff --git a/regression-test/data/nereids_datev2_p1/tpch/q14.out 
b/regression-test/data/nereids_datev2_p1/tpch/q14.out
index 91122b64a2..90897ced93 100644
--- a/regression-test/data/nereids_datev2_p1/tpch/q14.out
+++ b/regression-test/data/nereids_datev2_p1/tpch/q14.out
@@ -1,7 +1,7 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !select --
-16.283855689
+16.283855700
 
 -- !select --
-16.283855689
+16.283855700
 
diff --git a/regression-test/data/nereids_tpch_p1/tpch/q14.out 
b/regression-test/data/nereids_tpch_p1/tpch/q14.out
index 91122b64a2..90897ced93 100644
--- a/regression-test/data/nereids_tpch_p1/tpch/q14.out
+++ b/regression-test/data/nereids_tpch_p1/tpch/q14.out
@@ -1,7 +1,7 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !select --
-16.283855689
+16.283855700
 
 -- !select --
-16.283855689
+16.283855700
 
diff --git a/regression-test/suites/nereids_syntax_p0/test_join3.groovy 
b/regression-test/suites/nereids_syntax_p0/test_join3.groovy
index cf59e8f79c..c3ab7b1c02 100644
--- a/regression-test/suites/nereids_syntax_p0/test_join3.groovy
+++ b/regression-test/suites/nereids_syntax_p0/test_join3.groovy
@@ -25,9 +25,9 @@ suite("nereids_test_join3", "query,p0") {
     sql "CREATE DATABASE IF NOT EXISTS ${DBname}"
     sql "use ${DBname}"
 
-    def tbName1 = "t1"
-    def tbName2 = "t2"
-    def tbName3 = "t3"
+    def tbName1 = "nereids_test_join3t1"
+    def tbName2 = "nereids_test_join3t2"
+    def tbName3 = "nereids_test_join3t3"
 
     sql """CREATE TABLE IF NOT EXISTS ${tbName1} (name varchar(255), n 
INTEGER) DISTRIBUTED BY HASH(name) properties("replication_num" = "1");"""
     sql """CREATE TABLE IF NOT EXISTS ${tbName2} (name varchar(255), n 
INTEGER) DISTRIBUTED BY HASH(name) properties("replication_num" = "1");"""
diff --git a/regression-test/suites/nereids_syntax_p0/using_join.groovy 
b/regression-test/suites/nereids_syntax_p0/using_join.groovy
index d53d378650..795dc07b48 100644
--- a/regression-test/suites/nereids_syntax_p0/using_join.groovy
+++ b/regression-test/suites/nereids_syntax_p0/using_join.groovy
@@ -24,10 +24,10 @@ suite("nereids_using_join") {
         SET enable_nereids_planner=true
     """
 
-    sql """DROP TABLE IF EXISTS t1"""
+    sql """DROP TABLE IF EXISTS nereids_using_join_t1"""
 
     sql """
-        CREATE TABLE `t1` (
+        CREATE TABLE `nereids_using_join_t1` (
             `col1` varchar(4) NULL,
             `col2` int(11) NULL,
             `col3` int(11) NULL
@@ -40,10 +40,10 @@ suite("nereids_using_join") {
         );
     """
 
-    sql """DROP TABLE IF EXISTS t2"""
+    sql """DROP TABLE IF EXISTS nereids_using_join_t2"""
 
     sql """
-        CREATE TABLE `t2` (
+        CREATE TABLE `nereids_using_join_t2` (
             `col1` varchar(4) NULL,
             `col2` int(11) NULL,
             `col3` int(11) NULL
@@ -56,22 +56,22 @@ suite("nereids_using_join") {
         );
     """
 
-    sql """INSERT INTO t1 VALUES('1', 1, 1)"""
-    sql """INSERT INTO t1 VALUES('2', 2, 1)"""
-    sql """INSERT INTO t1 VALUES('3', 3, 1)"""
-    sql """INSERT INTO t1 VALUES('4', 4, 1)"""
+    sql """INSERT INTO nereids_using_join_t1 VALUES('1', 1, 1)"""
+    sql """INSERT INTO nereids_using_join_t1 VALUES('2', 2, 1)"""
+    sql """INSERT INTO nereids_using_join_t1 VALUES('3', 3, 1)"""
+    sql """INSERT INTO nereids_using_join_t1 VALUES('4', 4, 1)"""
 
-    sql """INSERT INTO t2 VALUES('1', 1, 1)"""
-    sql """INSERT INTO t2 VALUES('2', 2, 1)"""
-    sql """INSERT INTO t2 VALUES('6', 3, 1)"""
-    sql """INSERT INTO t2 VALUES('7', 4, 1)"""
+    sql """INSERT INTO nereids_using_join_t2 VALUES('1', 1, 1)"""
+    sql """INSERT INTO nereids_using_join_t2 VALUES('2', 2, 1)"""
+    sql """INSERT INTO nereids_using_join_t2 VALUES('6', 3, 1)"""
+    sql """INSERT INTO nereids_using_join_t2 VALUES('7', 4, 1)"""
 
     order_qt_sql """
-        SELECT t1.col1 FROM t1 JOIN t2 USING (col1)
+        SELECT nereids_using_join_t1.col1 FROM nereids_using_join_t1 JOIN 
nereids_using_join_t2 USING (col1)
     """
 
     order_qt_sql """
-        SELECT t1.col1 FROM t1 JOIN t2 USING (col1, col2)
+        SELECT nereids_using_join_t1.col1 FROM nereids_using_join_t1 JOIN 
nereids_using_join_t2 USING (col1, col2)
     """
 
 }
\ No newline at end of file


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

Reply via email to