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

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

commit 5719f6ff0c6119b752fef130d023d0309571022f
Author: LiBinfeng <46676950+libinfeng...@users.noreply.github.com>
AuthorDate: Wed May 15 16:39:42 2024 +0800

    [fix](planner) fix date_xxx functions without complete function signature 
(#34761)
    
    Problem:
    When using current_date as input of functions like date_sub,
    fold constant would failed cause of missing of function signature in Planner
    
    Solved:
    Add complete function signature of functions like date_sub
---
 .../java/org/apache/doris/rewrite/FEFunctions.java | 68 ++++++++++++++++++++++
 .../datetime_functions/test_date_function.groovy   | 45 ++++++++++++++
 2 files changed, 113 insertions(+)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/rewrite/FEFunctions.java 
b/fe/fe-core/src/main/java/org/apache/doris/rewrite/FEFunctions.java
index f5d03d68b26..520cdeefff0 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/rewrite/FEFunctions.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/rewrite/FEFunctions.java
@@ -104,6 +104,11 @@ public class FEFunctions {
         return daysAdd(date, day);
     }
 
+    @FEFunction(name = "date_add", argTypes = { "DATE", "INT" }, returnType = 
"DATE")
+    public static DateLiteral dateAddDate(LiteralExpr date, LiteralExpr day) 
throws AnalysisException {
+        return daysAdd(date, day);
+    }
+
     @FEFunction(name = "date_add", argTypes = { "DATEV2", "INT" }, returnType 
= "DATEV2")
     public static DateLiteral dateAddDateV2(LiteralExpr date, LiteralExpr day) 
throws AnalysisException {
         return daysAdd(date, day);
@@ -135,6 +140,12 @@ public class FEFunctions {
         return dateLiteral.plusYears(year.getLongValue());
     }
 
+    @FEFunction(name = "years_add", argTypes = { "DATE", "INT" }, returnType = 
"DATE")
+    public static DateLiteral yearsAddDate(LiteralExpr date, LiteralExpr year) 
throws AnalysisException {
+        DateLiteral dateLiteral = (DateLiteral) date;
+        return dateLiteral.plusYears((int) year.getLongValue());
+    }
+
     @FEFunction(name = "years_add", argTypes = { "DATEV2", "INT" }, returnType 
= "DATEV2")
     public static DateLiteral yearsAddDateV2(LiteralExpr date, LiteralExpr 
year) throws AnalysisException {
         DateLiteral dateLiteral = (DateLiteral) date;
@@ -153,6 +164,12 @@ public class FEFunctions {
         return dateLiteral.plusMonths(month.getLongValue());
     }
 
+    @FEFunction(name = "months_add", argTypes = { "DATE", "INT" }, returnType 
= "DATE")
+    public static DateLiteral monthsAddDate(LiteralExpr date, LiteralExpr 
month) throws AnalysisException {
+        DateLiteral dateLiteral = (DateLiteral) date;
+        return dateLiteral.plusMonths((int) month.getLongValue());
+    }
+
     @FEFunction(name = "months_add", argTypes = { "DATEV2", "INT" }, 
returnType = "DATEV2")
     public static DateLiteral monthsAddDateV2(LiteralExpr date, LiteralExpr 
month) throws AnalysisException {
         DateLiteral dateLiteral = (DateLiteral) date;
@@ -171,6 +188,12 @@ public class FEFunctions {
         return dateLiteral.plusDays(day.getLongValue());
     }
 
+    @FEFunction(name = "days_add", argTypes = { "DATE", "INT" }, returnType = 
"DATE")
+    public static DateLiteral daysAddDate(LiteralExpr date, LiteralExpr day) 
throws AnalysisException {
+        DateLiteral dateLiteral = (DateLiteral) date;
+        return dateLiteral.plusDays((int) day.getLongValue());
+    }
+
     @FEFunction(name = "days_add", argTypes = { "DATEV2", "INT" }, returnType 
= "DATEV2")
     public static DateLiteral daysAddDateV2(LiteralExpr date, LiteralExpr day) 
throws AnalysisException {
         DateLiteral dateLiteral = (DateLiteral) date;
@@ -224,26 +247,71 @@ public class FEFunctions {
         return dateAdd(date, new IntLiteral(-(int) day.getLongValue()));
     }
 
+    @FEFunction(name = "date_sub", argTypes = { "DATE", "INT" }, returnType = 
"DATE")
+    public static DateLiteral dateSubDate(LiteralExpr date, LiteralExpr day) 
throws AnalysisException {
+        return daysAdd(date, new IntLiteral(-(int) day.getLongValue()));
+    }
+
     @FEFunction(name = "date_sub", argTypes = { "DATEV2", "INT" }, returnType 
= "DATEV2")
     public static DateLiteral dateSubDateV2(LiteralExpr date, LiteralExpr day) 
throws AnalysisException {
         return dateAdd(date, new IntLiteral(-(int) day.getLongValue()));
     }
 
+    @FEFunction(name = "date_sub", argTypes = { "DATETIMEV2", "INT" }, 
returnType = "DATETIMEV2")
+    public static DateLiteral dateSubDateTimeV2(LiteralExpr date, LiteralExpr 
day) throws AnalysisException {
+        return daysAdd(date, new IntLiteral(-(int) day.getLongValue()));
+    }
+
     @FEFunction(name = "years_sub", argTypes = { "DATETIME", "INT" }, 
returnType = "DATETIME")
     public static DateLiteral yearsSub(LiteralExpr date, LiteralExpr year) 
throws AnalysisException {
         return yearsAdd(date, new IntLiteral(-(int) year.getLongValue()));
     }
 
+    @FEFunction(name = "years_sub", argTypes = { "DATE", "INT" }, returnType = 
"DATE")
+    public static DateLiteral yearsSubDate(LiteralExpr date, LiteralExpr year) 
throws AnalysisException {
+        return yearsAdd(date, new IntLiteral(-(int) year.getLongValue()));
+    }
+
+    @FEFunction(name = "years_sub", argTypes = { "DATEV2", "INT" }, returnType 
= "DATEV2")
+    public static DateLiteral yearsSubDateV2(LiteralExpr date, LiteralExpr 
year) throws AnalysisException {
+        return yearsAdd(date, new IntLiteral(-(int) year.getLongValue()));
+    }
+
+    @FEFunction(name = "years_sub", argTypes = { "DATETIMEV2", "INT" }, 
returnType = "DATETIMEV2")
+    public static DateLiteral yearsSubDateTimeV2(LiteralExpr date, LiteralExpr 
year) throws AnalysisException {
+        return yearsAdd(date, new IntLiteral(-(int) year.getLongValue()));
+    }
+
     @FEFunction(name = "months_sub", argTypes = { "DATETIME", "INT" }, 
returnType = "DATETIME")
     public static DateLiteral monthsSub(LiteralExpr date, LiteralExpr month) 
throws AnalysisException {
         return monthsAdd(date, new IntLiteral(-(int) month.getLongValue()));
     }
 
+    @FEFunction(name = "months_sub", argTypes = { "DATE", "INT" }, returnType 
= "DATE")
+    public static DateLiteral monthsSubDate(LiteralExpr date, LiteralExpr 
month) throws AnalysisException {
+        return monthsAdd(date, new IntLiteral(-(int) month.getLongValue()));
+    }
+
+    @FEFunction(name = "months_sub", argTypes = { "DATEV2", "INT" }, 
returnType = "DATEV2")
+    public static DateLiteral monthsSubDateV2(LiteralExpr date, LiteralExpr 
month) throws AnalysisException {
+        return monthsAdd(date, new IntLiteral(-(int) month.getLongValue()));
+    }
+
+    @FEFunction(name = "months_sub", argTypes = { "DATETIMEV2", "INT" }, 
returnType = "DATETIMEV2")
+    public static DateLiteral monthsSubDateTimeV2(LiteralExpr date, 
LiteralExpr month) throws AnalysisException {
+        return monthsAdd(date, new IntLiteral(-(int) month.getLongValue()));
+    }
+
     @FEFunction(name = "days_sub", argTypes = { "DATETIME", "INT" }, 
returnType = "DATETIME")
     public static DateLiteral daysSub(LiteralExpr date, LiteralExpr day) 
throws AnalysisException {
         return daysAdd(date, new IntLiteral(-(int) day.getLongValue()));
     }
 
+    @FEFunction(name = "days_sub", argTypes = { "DATE", "INT" }, returnType = 
"DATE")
+    public static DateLiteral daysSubDate(LiteralExpr date, LiteralExpr day) 
throws AnalysisException {
+        return daysAdd(date, new IntLiteral(-(int) day.getLongValue()));
+    }
+
     @FEFunction(name = "days_sub", argTypes = { "DATETIMEV2", "INT" }, 
returnType = "DATETIMEV2")
     public static DateLiteral daysSubDateTimeV2(LiteralExpr date, LiteralExpr 
day) throws AnalysisException {
         return daysAdd(date, new IntLiteral(-(int) day.getLongValue()));
diff --git 
a/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy
 
b/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy
index 04de3abef06..49db2bb4c80 100644
--- 
a/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy
@@ -239,6 +239,51 @@ suite("test_date_function") {
         contains "2025-01-16"
     }
 
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
date_sub('2024-01-16',INTERVAL 1 day);"""
+        contains "2024-01-15"
+    }
+
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
months_sub('2024-02-16',1);"""
+        contains "2024-01-16"
+    }
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
years_sub('2024-01-16',1);"""
+        contains "2023-01-16"
+    }
+
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
date_add(cast('2024-01-16' as DATE),INTERVAL 1 day);"""
+        contains "2024-01-17"
+    }
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
adddate(cast('2024-01-16' as DATE),INTERVAL 1 day);"""
+        contains "2024-01-17"
+    }
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
months_add(cast('2024-01-16' as DATE),1);"""
+        contains "2024-02-16"
+    }
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
years_add(cast('2024-01-16' as DATE),1);"""
+        contains "2025-01-16"
+    }
+
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
date_sub(cast('2024-01-16' as DATE),INTERVAL 1 day);"""
+        contains "2024-01-15"
+    }
+
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
months_sub(cast('2024-02-16' as DATE),1);"""
+        contains "2024-01-16"
+    }
+    explain {
+        sql """select * from ${tableName} where test_datetime >= 
years_sub(cast('2024-01-16' as DATE),1);"""
+        contains "2023-01-16"
+    }
+
     // DATE_FORMAT
     sql """ truncate table ${tableName} """
     sql """ insert into ${tableName} values ("2009-10-04 22:23:00") """


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to