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

dataroaring 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 790bae01ba8 branch-3.0: [fix](Nereids) should not produce date type 
for datev2 type when process string literal #55011 (#55103)
790bae01ba8 is described below

commit 790bae01ba8031b03f0157f67e9e012e8dd38f46
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Sep 11 12:03:47 2025 +0800

    branch-3.0: [fix](Nereids) should not produce date type for datev2 type 
when process string literal #55011 (#55103)
    
    Cherry-picked from #55011
    
    Co-authored-by: morrySnow <[email protected]>
---
 .../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 56bbcb5ca96..74faaf0fff9 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, AnalysisException> 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 fc494f410c1..56fa42e914d 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