This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 0905133d555 [fix](planner) fix date_xxx functions without complete
function signature (#34761)
0905133d555 is described below
commit 0905133d555db9cde1f9723b7ab235f48c8f3043
Author: LiBinfeng <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]