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

yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new d2ee9d84a3e branch-4.0: [fix](datetime) throw exception for 
date_floor/ceil instead of return NULL #60633 (#60640)
d2ee9d84a3e is described below

commit d2ee9d84a3e77a1b9047bdb92d41fa456a92f2bf
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Feb 10 21:30:47 2026 +0800

    branch-4.0: [fix](datetime) throw exception for date_floor/ceil instead of 
return NULL #60633 (#60640)
    
    Cherry-picked from #60633
    
    Co-authored-by: zclllyybb <[email protected]>
---
 .../functions/executable/TimeRoundSeries.java      |  4 ++-
 .../datetime_functions/test_date_floor_ceil.groovy | 38 ++++++++++++++++++++++
 2 files changed, 41 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/TimeRoundSeries.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/TimeRoundSeries.java
index bd1e8f0b28e..c32f733bedb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/TimeRoundSeries.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/TimeRoundSeries.java
@@ -18,6 +18,7 @@
 package org.apache.doris.nereids.trees.expressions.functions.executable;
 
 import org.apache.doris.nereids.annotation.Developing;
+import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.trees.expressions.ExecFunction;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.literal.DateTimeLiteral;
@@ -53,7 +54,8 @@ public class TimeRoundSeries {
     private static LocalDateTime getDateCeilOrFloor(DATE tag, LocalDateTime 
date, int period, LocalDateTime origin,
             boolean getCeil) {
         if (period < 1) {
-            return null;
+            throw new AnalysisException("Operation " + tag.name().toLowerCase()
+                    + (getCeil ? "_ceil" : "_floor") + " of " + period + " out 
of range");
         }
 
         DateTimeV2Literal dt = (DateTimeV2Literal) 
DateTimeV2Literal.fromJavaDateType(date);
diff --git 
a/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_floor_ceil.groovy
 
b/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_floor_ceil.groovy
index 83b3d1d7aeb..99b9a7d5362 100644
--- 
a/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_floor_ceil.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_floor_ceil.groovy
@@ -309,4 +309,42 @@ suite("test_date_floor_ceil") {
     testFoldConst("SELECT YEAR_CEIL('2001-01-01 0:00:00.000001', 10);");
     testFoldConst("SELECT YEAR_CEIL('2001-01-01 0:00:00.000001', 
'1970-01-01');");
     testFoldConst("SELECT YEAR_CEIL('2001-01-01 0:00:00.000001', 10, 
'1970-01-01');");
+
+    // period < 1 should throw exception (FE constant folding path)
+    test {
+        sql "select date_floor('2007-01-02', interval 0 month);"
+        exception "out of range"
+    }
+    test {
+        sql "select date_ceil('2007-01-02', interval 0 month);"
+        exception "out of range"
+    }
+    test {
+        sql "select month_floor('2023-07-14 15:30:45', 0);"
+        exception "out of range"
+    }
+    test {
+        sql "select date_floor('2023-07-14 15:30:45', interval -1 month);"
+        exception "out of range"
+    }
+
+    // period < 1 should throw exception (BE path, the original bug scenario)
+    sql """set debug_skip_fold_constant = true"""
+    test {
+        sql "select date_floor('2007-01-02', interval 0 month);"
+        exception "out of range"
+    }
+    test {
+        sql "select date_ceil('2007-01-02', interval 0 month);"
+        exception "out of range"
+    }
+    test {
+        sql "select month_floor('2023-07-14 15:30:45', 0);"
+        exception "out of range"
+    }
+    test {
+        sql "select date_floor('2023-07-14 15:30:45', interval -1 month);"
+        exception "out of range"
+    }
+    sql """set debug_skip_fold_constant = false"""
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to