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