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

caiconghui pushed a commit to branch bugfix_cast
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 5e1c7a80eea6a5ca7e2431349852ba9cc9df88e9
Author: caiconghui1 <[email protected]>
AuthorDate: Fri Dec 26 14:44:55 2025 +0800

    fix(cast): fix cast int to string instead of cast string to double for 
equalTo
---
 .../org/apache/doris/nereids/util/TypeCoercionUtils.java   |  4 +++-
 .../apache/doris/nereids/util/TypeCoercionUtilsTest.java   | 14 ++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

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 641dd4f76dc..4e9e86fd9b8 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
@@ -34,6 +34,7 @@ import org.apache.doris.nereids.trees.expressions.CaseWhen;
 import org.apache.doris.nereids.trees.expressions.Cast;
 import org.apache.doris.nereids.trees.expressions.ComparisonPredicate;
 import org.apache.doris.nereids.trees.expressions.Divide;
+import org.apache.doris.nereids.trees.expressions.EqualTo;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.InPredicate;
 import org.apache.doris.nereids.trees.expressions.IntegralDivide;
@@ -1314,7 +1315,8 @@ public class TypeCoercionUtils {
         if (GlobalVariable.enableNewTypeCoercionBehavior) {
             commonType = findWiderTypeForTwo(left.getDataType(), 
right.getDataType(), false, false);
         } else {
-            commonType = findWiderTypeForTwoForComparison(left.getDataType(), 
right.getDataType(), false);
+            commonType = findWiderTypeForTwoForComparison(left.getDataType(), 
right.getDataType(),
+                    comparisonPredicate instanceof EqualTo);
         }
 
         if (commonType.isPresent()) {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/TypeCoercionUtilsTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/TypeCoercionUtilsTest.java
index 5931331096b..4ca526247a8 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/TypeCoercionUtilsTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/TypeCoercionUtilsTest.java
@@ -35,6 +35,7 @@ import 
org.apache.doris.nereids.trees.expressions.literal.DateV2Literal;
 import org.apache.doris.nereids.trees.expressions.literal.DecimalLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.DecimalV3Literal;
 import org.apache.doris.nereids.trees.expressions.literal.DoubleLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.IntegerLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.StringLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral;
 import org.apache.doris.nereids.types.ArrayType;
@@ -64,6 +65,7 @@ import org.apache.doris.nereids.types.TimeV2Type;
 import org.apache.doris.nereids.types.TinyIntType;
 import org.apache.doris.nereids.types.VarcharType;
 import org.apache.doris.nereids.types.coercion.IntegralType;
+import org.apache.doris.qe.GlobalVariable;
 
 import com.google.common.collect.ImmutableList;
 import org.junit.jupiter.api.Assertions;
@@ -322,4 +324,16 @@ public class TypeCoercionUtilsTest {
         Assertions.assertThrows(AnalysisException.class, () -> 
TypeCoercionUtils.getNumResultType(StructType.SYSTEM_DEFAULT));
         Assertions.assertThrows(AnalysisException.class, () -> 
TypeCoercionUtils.getNumResultType(QuantileStateType.INSTANCE));
     }
+
+    @Test
+    public void testProcessEquealToStringCoercoin() {
+        GlobalVariable.enableNewTypeCoercionBehavior = false;
+        EqualTo equalTo = new EqualTo(
+                new SlotReference("c1", StringType.INSTANCE),
+                new IntegerLiteral(3)
+        );
+        EqualTo expression = (EqualTo) 
TypeCoercionUtils.processComparisonPredicate(equalTo);
+        Assertions.assertEquals(StringType.INSTANCE, 
expression.left().getDataType());
+        Assertions.assertEquals(StringType.INSTANCE, 
expression.right().getDataType());
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to