Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions fe/fe-core/src/main/java/org/apache/doris/rewrite/FEFunctions.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,11 @@ public static DateLiteral dateAdd(LiteralExpr date, LiteralExpr day) throws Anal
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);
Expand Down Expand Up @@ -134,6 +139,12 @@ public static DateLiteral yearsAdd(LiteralExpr date, LiteralExpr year) throws An
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;
Expand All @@ -152,6 +163,12 @@ public static DateLiteral monthsAdd(LiteralExpr date, LiteralExpr month) throws
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;
Expand All @@ -170,6 +187,12 @@ public static DateLiteral daysAdd(LiteralExpr date, LiteralExpr day) throws Anal
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;
Expand Down Expand Up @@ -223,26 +246,71 @@ public static DateLiteral dateSub(LiteralExpr date, LiteralExpr day) throws Anal
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()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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") """
Expand Down