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]