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]
