This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new ba1c3da6c4f [Fix](Planner) fix date_xxx functions without complete
function signature (#34760)
ba1c3da6c4f is described below
commit ba1c3da6c4f9de2c64649d6ad08c1d17205167aa
Author: LiBinfeng <[email protected]>
AuthorDate: Wed May 15 17:59:41 2024 +0800
[Fix](Planner) fix date_xxx functions without complete function signature
(#34760)
pick from master #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 57ba8876803..e34bbe16a7b 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
@@ -103,6 +103,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);
@@ -134,6 +139,12 @@ public class FEFunctions {
return dateLiteral.plusYears((int) 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;
@@ -152,6 +163,12 @@ public class FEFunctions {
return dateLiteral.plusMonths((int) 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;
@@ -170,6 +187,12 @@ public class FEFunctions {
return dateLiteral.plusDays((int) 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;
@@ -223,26 +246,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 4fb29176b46..b6f1fea75db 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: [email protected]
For additional commands, e-mail: [email protected]