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 8fa5b988793 branch-4.0: [fix](window) allow constant expression 
evaluation in LAG/LEAD offset parameter #58200 (#58261)
8fa5b988793 is described below

commit 8fa5b988793b974d448afdc0ba7794f0bfb57731
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Nov 25 09:51:02 2025 +0800

    branch-4.0: [fix](window) allow constant expression evaluation in LAG/LEAD 
offset parameter #58200 (#58261)
    
    Cherry-picked from #58200
    
    Co-authored-by: zhangstar333 <[email protected]>
---
 .../trees/expressions/functions/window/Lag.java    |  2 +-
 .../trees/expressions/functions/window/Lead.java   |  4 +--
 .../data/nereids_syntax_p0/lag_lead_signature.out  | 25 +++++++++++++++++
 .../nereids_syntax_p0/lag_lead_signature.groovy    | 31 ++++++++++++++++++++--
 4 files changed, 57 insertions(+), 5 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/window/Lag.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/window/Lag.java
index 105b08f37d1..1cf808e32f7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/window/Lag.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/window/Lag.java
@@ -93,7 +93,7 @@ public class Lag extends WindowFunction implements 
TernaryExpression, Explicitly
     }
 
     @Override
-    public void checkLegalityBeforeTypeCoercion() {
+    public void checkLegalityAfterRewrite() {
         if (children().size() == 1) {
             return;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/window/Lead.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/window/Lead.java
index 1666e9cab1b..a3a21ce20ca 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/window/Lead.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/window/Lead.java
@@ -94,7 +94,7 @@ public class Lead extends WindowFunction implements 
TernaryExpression, Explicitl
     }
 
     @Override
-    public void checkLegalityBeforeTypeCoercion() {
+    public void checkLegalityAfterRewrite() {
         if (children().size() == 1) {
             return;
         }
@@ -107,7 +107,7 @@ public class Lead extends WindowFunction implements 
TernaryExpression, Explicitl
                 }
             } else {
                 throw new AnalysisException(
-                    "The offset parameter of LAG must be a constant positive 
integer: " + this.toSql());
+                    "The offset parameter of LEAD must be a constant positive 
integer: " + this.toSql());
             }
         }
     }
diff --git a/regression-test/data/nereids_syntax_p0/lag_lead_signature.out 
b/regression-test/data/nereids_syntax_p0/lag_lead_signature.out
new file mode 100644
index 00000000000..b8d7b980fa8
--- /dev/null
+++ b/regression-test/data/nereids_syntax_p0/lag_lead_signature.out
@@ -0,0 +1,25 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !sql1 --
+0
+0
+
+-- !sql2 --
+0
+44
+
+-- !sql3 --
+0
+0
+
+-- !sql4 --
+0
+0
+
+-- !sql5 --
+0
+28
+
+-- !sql6 --
+0
+0
+
diff --git a/regression-test/suites/nereids_syntax_p0/lag_lead_signature.groovy 
b/regression-test/suites/nereids_syntax_p0/lag_lead_signature.groovy
index 5dde98a95a0..9d9618fdcaf 100644
--- a/regression-test/suites/nereids_syntax_p0/lag_lead_signature.groovy
+++ b/regression-test/suites/nereids_syntax_p0/lag_lead_signature.groovy
@@ -20,7 +20,8 @@ suite("lag_lead_signature") {
     sql "SET enable_fallback_to_original_planner=false"
     sql """drop table if exists lag_lead_signature_t"""
     sql """ CREATE TABLE lag_lead_signature_t (
-            `k` VARCHAR(200) NULL
+            `k` VARCHAR(200) NULL,
+            `id` BIGINT NULL
             ) ENGINE=OLAP
             DUPLICATE KEY(`k`)
             DISTRIBUTED BY HASH(`k`) BUCKETS 3
@@ -28,8 +29,34 @@ suite("lag_lead_signature") {
             "replication_allocation" = "tag.location.default: 1"
             );"""
     
-    sql "insert into lag_lead_signature_t values ('44'), ('28');"
+    sql "insert into lag_lead_signature_t values ('44','10'), ('28','11');"
 
     sql "select lag(k, 1, 0) over(), lead(k, 1, 0) over() from 
lag_lead_signature_t;"
 
+    qt_sql1 "select lag(k, 1 + 1, 0) over(order by id) from 
lag_lead_signature_t order by 1;"
+    qt_sql2 "select lag(k, abs(1), 0) over(order by id) from 
lag_lead_signature_t order by 1;"
+    qt_sql3 "select lag(k, abs(1) + 1, 0) over(order by id) from 
lag_lead_signature_t order by 1;"
+    qt_sql4 "select lead(k, 1 + 1, 0) over(order by id) from 
lag_lead_signature_t order by 1;"
+    qt_sql5 "select lead(k, abs(1), 0) over(order by id) from 
lag_lead_signature_t order by 1;"
+    qt_sql6 "select lead(k, abs(1) + 1, 0) over(order by id) from 
lag_lead_signature_t order by 1;"
+
+    test {
+        sql "select lag(k, -100, 0) over() from lag_lead_signature_t;"
+        exception "be a constant positive integer"
+    }
+
+    test {
+        sql "select lead(k, -100, 0) over() from lag_lead_signature_t;"
+        exception "be a constant positive integer"
+    }
+
+    test {
+        sql "select lead(k, id, 0) over() from lag_lead_signature_t;"
+        exception "must be a constant value"
+    }
+
+    test {
+        sql "select lag(k, id, 0) over() from lag_lead_signature_t;"
+        exception "must be a constant value"
+    }
 }
\ No newline at end of file


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

Reply via email to