From 6ca90afbfa02701e2e2f996532c69bd972a04e7f Mon Sep 17 00:00:00 2001 From: Zhengguo Yang Date: Fri, 19 Aug 2022 21:27:32 +0800 Subject: [PATCH] [Bugfix](datetime) fix DateLiteral range check is no longer valid (#11917) * [Bugfix](datetime) fix DateLiteral range check is no longer valid --- .../main/java/org/apache/doris/analysis/DateLiteral.java | 3 +++ .../java/org/apache/doris/analysis/DateLiteralTest.java | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java index 0bf07af23f..96ab5edd06 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DateLiteral.java @@ -432,6 +432,9 @@ public class DateLiteral extends LiteralExpr { second = getOrDefault(dateTime, ChronoField.SECOND_OF_MINUTE, 0); microsecond = getOrDefault(dateTime, ChronoField.MICRO_OF_SECOND, 0); this.type = type; + if (checkRange() || checkDate()) { + throw new AnalysisException("Datetime value is out of range"); + } } catch (Exception ex) { throw new AnalysisException("date literal [" + s + "] is invalid: " + ex.getMessage()); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/DateLiteralTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/DateLiteralTest.java index b0318b0e21..9715b7a182 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/DateLiteralTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/DateLiteralTest.java @@ -166,6 +166,13 @@ public class DateLiteralTest { hasException = true; } Assert.assertFalse(hasException); + try { + DateLiteral literal = new DateLiteral("10000-10-07", Type.DATE); + Assert.assertEquals(10000, literal.getYear()); + Assert.assertTrue(false); + } catch (AnalysisException e) { + // pass + } } @Test