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

morrysnow pushed a commit to branch 3.1_55011
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 3b5315c4cd96f467214a084bef6e1128a2911cb9
Author: morrySnow <[email protected]>
AuthorDate: Thu Aug 21 14:31:07 2025 +0800

    branch-3.1: [fix](Nereids) should not produce date type for datev2 type 
when process string literal #55011
    
    picked from #55011
---
 .../nereids/trees/expressions/literal/DateLiteral.java   |  8 ++++++--
 .../org/apache/doris/nereids/util/TypeCoercionUtils.java |  4 ++--
 .../apache/doris/nereids/util/TypeCoercionUtilsTest.java | 16 ++++++++++++++++
 3 files changed, 24 insertions(+), 4 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateLiteral.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateLiteral.java
index a41fd5f7acc..f94af016ba0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateLiteral.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/DateLiteral.java
@@ -273,7 +273,7 @@ public class DateLiteral extends Literal {
     }
 
     /** parseDateLiteral */
-    public static Result<DateLiteral, AnalysisException> 
parseDateLiteral(String s) {
+    public static Result<DateLiteral, AnalysisException> 
parseDateLiteral(String s, boolean isV2) {
         Result<TemporalAccessor, ? extends Exception> parseResult = 
parseDateTime(s);
         if (parseResult.isError()) {
             return parseResult.cast();
@@ -286,7 +286,11 @@ public class DateLiteral extends Literal {
         if (checkDatetime(dateTime) || checkRange(year, month, day) || 
checkDate(year, month, day)) {
             return Result.err(() -> new AnalysisException("date/datetime 
literal [" + s + "] is out of range"));
         }
-        return Result.ok(new DateLiteral(year, month, day));
+        if (isV2) {
+            return Result.ok(new DateV2Literal(year, month, day));
+        } else {
+            return Result.ok(new DateLiteral(year, month, day));
+        }
     }
 
     /** parseDateTime */
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 15de1fd4c22..fd98f2e02bb 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
@@ -622,7 +622,7 @@ public class TypeCoercionUtils {
             } else if (dataType.isDateTimeType() && 
DateTimeChecker.isValidDateTime(value)) {
                 ret = DateTimeLiteral.parseDateTimeLiteral(value, 
false).orElse(null);
             } else if (dataType.isDateV2Type() && 
DateTimeChecker.isValidDateTime(value)) {
-                Result<DateLiteral, AnalysisException> parseResult = 
DateV2Literal.parseDateLiteral(value);
+                Result<DateLiteral, AnalysisException> parseResult = 
DateV2Literal.parseDateLiteral(value, true);
                 if (parseResult.isOk()) {
                     ret = parseResult.get();
                 } else {
@@ -633,7 +633,7 @@ public class TypeCoercionUtils {
                     }
                 }
             } else if (dataType.isDateType() && 
DateTimeChecker.isValidDateTime(value)) {
-                ret = DateLiteral.parseDateLiteral(value).orElse(null);
+                ret = DateLiteral.parseDateLiteral(value, false).orElse(null);
             }
         } catch (Exception e) {
             if (LOG.isDebugEnabled()) {
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 8d32dfbb2a2..9060e8d87df 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
@@ -825,4 +825,20 @@ public class TypeCoercionUtilsTest {
         Assertions.assertEquals(DecimalV3Type.createDecimalV3Type(23, 3), 
smallIntString.getCompareExpr().getDataType());
         Assertions.assertEquals(DecimalV3Type.createDecimalV3Type(23, 3), 
smallIntString.getOptions().get(0).getDataType());
     }
+
+    @Test
+    public void testCharacterLiteralTypeCoercion() {
+        // datev2
+        Assertions.assertEquals(DateV2Type.INSTANCE,
+                TypeCoercionUtils.characterLiteralTypeCoercion("2020-02-02", 
DateV2Type.INSTANCE).get().getDataType());
+        // datetimev2
+        Assertions.assertEquals(DateTimeV2Type.of(0),
+                TypeCoercionUtils.characterLiteralTypeCoercion("2020-02-02", 
DateTimeV2Type.of(0)).get().getDataType());
+        // date
+        Assertions.assertEquals(DateType.INSTANCE,
+                TypeCoercionUtils.characterLiteralTypeCoercion("2020-02-02", 
DateType.INSTANCE).get().getDataType());
+        // datetime
+        Assertions.assertEquals(DateTimeType.INSTANCE,
+                TypeCoercionUtils.characterLiteralTypeCoercion("2020-02-02", 
DateTimeType.INSTANCE).get().getDataType());
+    }
 }


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

Reply via email to