diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java index c1e840078c..45104ab836 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java @@ -107,7 +107,9 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.DayName; import org.apache.doris.nereids.trees.expressions.functions.scalar.DayOfMonth; import org.apache.doris.nereids.trees.expressions.functions.scalar.DayOfWeek; import org.apache.doris.nereids.trees.expressions.functions.scalar.DayOfYear; +import org.apache.doris.nereids.trees.expressions.functions.scalar.DaysAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.DaysDiff; +import org.apache.doris.nereids.trees.expressions.functions.scalar.DaysSub; import org.apache.doris.nereids.trees.expressions.functions.scalar.Dceil; import org.apache.doris.nereids.trees.expressions.functions.scalar.Degrees; import org.apache.doris.nereids.trees.expressions.functions.scalar.Dexp; @@ -150,7 +152,9 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.HllHash; import org.apache.doris.nereids.trees.expressions.functions.scalar.Hour; import org.apache.doris.nereids.trees.expressions.functions.scalar.HourCeil; import org.apache.doris.nereids.trees.expressions.functions.scalar.HourFloor; +import org.apache.doris.nereids.trees.expressions.functions.scalar.HoursAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.HoursDiff; +import org.apache.doris.nereids.trees.expressions.functions.scalar.HoursSub; import org.apache.doris.nereids.trees.expressions.functions.scalar.If; import org.apache.doris.nereids.trees.expressions.functions.scalar.Initcap; import org.apache.doris.nereids.trees.expressions.functions.scalar.Instr; @@ -200,13 +204,17 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Md5Sum; import org.apache.doris.nereids.trees.expressions.functions.scalar.Minute; import org.apache.doris.nereids.trees.expressions.functions.scalar.MinuteCeil; import org.apache.doris.nereids.trees.expressions.functions.scalar.MinuteFloor; +import org.apache.doris.nereids.trees.expressions.functions.scalar.MinutesAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.MinutesDiff; +import org.apache.doris.nereids.trees.expressions.functions.scalar.MinutesSub; import org.apache.doris.nereids.trees.expressions.functions.scalar.MoneyFormat; import org.apache.doris.nereids.trees.expressions.functions.scalar.Month; import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthCeil; import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthFloor; import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthName; +import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthsAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthsDiff; +import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthsSub; import org.apache.doris.nereids.trees.expressions.functions.scalar.MultiMatchAny; import org.apache.doris.nereids.trees.expressions.functions.scalar.MultiSearchAllPositions; import org.apache.doris.nereids.trees.expressions.functions.scalar.MurmurHash332; @@ -244,7 +252,9 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.RunningDiffer import org.apache.doris.nereids.trees.expressions.functions.scalar.Second; import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondCeil; import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondFloor; +import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsDiff; +import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsSub; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sign; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sin; import org.apache.doris.nereids.trees.expressions.functions.scalar.Size; @@ -306,12 +316,16 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.WeekCeil; import org.apache.doris.nereids.trees.expressions.functions.scalar.WeekFloor; import org.apache.doris.nereids.trees.expressions.functions.scalar.WeekOfYear; import org.apache.doris.nereids.trees.expressions.functions.scalar.Weekday; +import org.apache.doris.nereids.trees.expressions.functions.scalar.WeeksAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.WeeksDiff; +import org.apache.doris.nereids.trees.expressions.functions.scalar.WeeksSub; import org.apache.doris.nereids.trees.expressions.functions.scalar.Year; import org.apache.doris.nereids.trees.expressions.functions.scalar.YearCeil; import org.apache.doris.nereids.trees.expressions.functions.scalar.YearFloor; import org.apache.doris.nereids.trees.expressions.functions.scalar.YearWeek; +import org.apache.doris.nereids.trees.expressions.functions.scalar.YearsAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.YearsDiff; +import org.apache.doris.nereids.trees.expressions.functions.scalar.YearsSub; import com.google.common.collect.ImmutableList; @@ -415,7 +429,9 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(DayOfMonth.class, "dayofmonth"), scalar(DayOfWeek.class, "dayofweek"), scalar(DayOfYear.class, "dayofyear"), + scalar(DaysAdd.class, "days_add"), scalar(DaysDiff.class, "days_diff"), + scalar(DaysSub.class, "days_sub"), scalar(Dceil.class, "dceil"), scalar(Degrees.class, "degrees"), scalar(Dexp.class, "dexp"), @@ -458,7 +474,9 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(Hour.class, "hour"), scalar(HourCeil.class, "hour_ceil"), scalar(HourFloor.class, "hour_floor"), + scalar(HoursAdd.class, "hours_add"), scalar(HoursDiff.class, "hours_diff"), + scalar(HoursSub.class, "hours_sub"), scalar(If.class, "if"), scalar(Initcap.class, "initcap"), scalar(Instr.class, "instr"), @@ -508,13 +526,17 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(Minute.class, "minute"), scalar(MinuteCeil.class, "minute_ceil"), scalar(MinuteFloor.class, "minute_floor"), + scalar(MinutesAdd.class, "minutes_add"), scalar(MinutesDiff.class, "minutes_diff"), + scalar(MinutesSub.class, "minutes_sub"), scalar(MoneyFormat.class, "money_format"), scalar(Month.class, "month"), scalar(MonthCeil.class, "month_ceil"), scalar(MonthFloor.class, "month_floor"), scalar(MonthName.class, "monthname"), + scalar(MonthsAdd.class, "months_add"), scalar(MonthsDiff.class, "months_diff"), + scalar(MonthsSub.class, "months_sub"), scalar(MultiMatchAny.class, "multi_match_any"), scalar(MultiSearchAllPositions.class, "multi_search_all_positions"), scalar(MurmurHash332.class, "murmur_hash3_32"), @@ -552,7 +574,9 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(Second.class, "second"), scalar(SecondCeil.class, "second_ceil"), scalar(SecondFloor.class, "second_floor"), + scalar(SecondsAdd.class, "seconds_add"), scalar(SecondsDiff.class, "seconds_diff"), + scalar(SecondsSub.class, "seconds_sub"), scalar(Sign.class, "sign"), scalar(Sin.class, "sin"), scalar(Size.class, "size"), @@ -614,12 +638,16 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(WeekFloor.class, "week_floor"), scalar(WeekOfYear.class, "weekofyear"), scalar(Weekday.class, "weekday"), + scalar(WeeksAdd.class, "weeks_add"), scalar(WeeksDiff.class, "weeks_diff"), + scalar(WeeksSub.class, "weeks_sub"), scalar(Year.class, "year"), scalar(YearCeil.class, "year_ceil"), scalar(YearFloor.class, "year_floor"), scalar(YearWeek.class, "yearweek"), - scalar(YearsDiff.class, "years_diff") + scalar(YearsAdd.class, "years_add"), + scalar(YearsDiff.class, "years_diff"), + scalar(YearsSub.class, "years_sub") ); public static final BuiltinScalarFunctions INSTANCE = new BuiltinScalarFunctions(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java index 87a1652e4e..2938646433 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java @@ -163,6 +163,8 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthsSub; import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsDiff; import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsSub; +import org.apache.doris.nereids.trees.expressions.functions.scalar.WeeksAdd; +import org.apache.doris.nereids.trees.expressions.functions.scalar.WeeksSub; import org.apache.doris.nereids.trees.expressions.functions.scalar.YearsAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.YearsDiff; import org.apache.doris.nereids.trees.expressions.functions.scalar.YearsSub; @@ -774,22 +776,19 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor { return new DaysAdd(timeStamp, amount); } - if ("DAY".equalsIgnoreCase(ctx.unit.getText())) { - return new DaysAdd(timeStamp, amount); - } - if ("MONTH".equalsIgnoreCase(ctx.unit.getText())) { - return new MonthsAdd(timeStamp, amount); - } if ("Year".equalsIgnoreCase(ctx.unit.getText())) { return new YearsAdd(timeStamp, amount); - } - if ("Hour".equalsIgnoreCase(ctx.unit.getText())) { + } else if ("MONTH".equalsIgnoreCase(ctx.unit.getText())) { + return new MonthsAdd(timeStamp, amount); + } else if ("WEEK".equalsIgnoreCase(ctx.unit.getText())) { + return new WeeksAdd(timeStamp, amount); + } else if ("DAY".equalsIgnoreCase(ctx.unit.getText())) { + return new DaysAdd(timeStamp, amount); + } else if ("Hour".equalsIgnoreCase(ctx.unit.getText())) { return new HoursAdd(timeStamp, amount); - } - if ("Minute".equalsIgnoreCase(ctx.unit.getText())) { + } else if ("Minute".equalsIgnoreCase(ctx.unit.getText())) { return new MinutesAdd(timeStamp, amount); - } - if ("Second".equalsIgnoreCase(ctx.unit.getText())) { + } else if ("Second".equalsIgnoreCase(ctx.unit.getText())) { return new SecondsAdd(timeStamp, amount); } throw new ParseException("Unsupported time unit: " + ctx.unit @@ -808,22 +807,19 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor { return new DaysSub(timeStamp, amount); } - if ("DAY".equalsIgnoreCase(ctx.unit.getText())) { - return new DaysSub(timeStamp, amount); - } - if ("MONTH".equalsIgnoreCase(ctx.unit.getText())) { - return new MonthsSub(timeStamp, amount); - } if ("Year".equalsIgnoreCase(ctx.unit.getText())) { return new YearsSub(timeStamp, amount); - } - if ("Hour".equalsIgnoreCase(ctx.unit.getText())) { + } else if ("MONTH".equalsIgnoreCase(ctx.unit.getText())) { + return new MonthsSub(timeStamp, amount); + } else if ("WEEK".equalsIgnoreCase(ctx.unit.getText())) { + return new WeeksSub(timeStamp, amount); + } else if ("DAY".equalsIgnoreCase(ctx.unit.getText())) { + return new DaysSub(timeStamp, amount); + } else if ("Hour".equalsIgnoreCase(ctx.unit.getText())) { return new HoursSub(timeStamp, amount); - } - if ("Minute".equalsIgnoreCase(ctx.unit.getText())) { + } else if ("Minute".equalsIgnoreCase(ctx.unit.getText())) { return new MinutesSub(timeStamp, amount); - } - if ("Second".equalsIgnoreCase(ctx.unit.getText())) { + } else if ("Second".equalsIgnoreCase(ctx.unit.getText())) { return new SecondsSub(timeStamp, amount); } throw new ParseException("Unsupported time unit: " + ctx.unit diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WeeksAdd.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WeeksAdd.java new file mode 100644 index 0000000000..f5a57850cc --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WeeksAdd.java @@ -0,0 +1,77 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.trees.expressions.functions.scalar; + +import org.apache.doris.catalog.FunctionSignature; +import org.apache.doris.common.Config; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable; +import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; +import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.DateTimeType; +import org.apache.doris.nereids.types.DateTimeV2Type; +import org.apache.doris.nereids.types.DateType; +import org.apache.doris.nereids.types.DateV2Type; +import org.apache.doris.nereids.types.IntegerType; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * ScalarFunction 'weeks_add'. + */ +public class WeeksAdd extends ScalarFunction implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable { + //When enable_date_conversion is true, we prefer to V2 signature. + // This preference follows original planner. refer to ScalarType.getDefaultDateType() + public static final List SIGNATURES = Config.enable_date_conversion ? ImmutableList.of( + FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT) + .args(DateTimeV2Type.SYSTEM_DEFAULT, IntegerType.INSTANCE), + FunctionSignature.ret(DateV2Type.INSTANCE).args(DateV2Type.INSTANCE, IntegerType.INSTANCE), + FunctionSignature.ret(DateTimeType.INSTANCE).args(DateTimeType.INSTANCE, IntegerType.INSTANCE), + FunctionSignature.ret(DateType.INSTANCE).args(DateType.INSTANCE, IntegerType.INSTANCE) + ) : ImmutableList.of( + FunctionSignature.ret(DateTimeType.INSTANCE).args(DateTimeType.INSTANCE, IntegerType.INSTANCE), + FunctionSignature.ret(DateType.INSTANCE).args(DateType.INSTANCE, IntegerType.INSTANCE), + FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT) + .args(DateTimeV2Type.SYSTEM_DEFAULT, IntegerType.INSTANCE), + FunctionSignature.ret(DateV2Type.INSTANCE).args(DateV2Type.INSTANCE, IntegerType.INSTANCE) + ); + + public WeeksAdd(Expression arg0, Expression arg1) { + super("weeks_add", arg0, arg1); + } + + @Override + public WeeksAdd withChildren(List children) { + Preconditions.checkArgument(children.size() == 2); + return new WeeksAdd(children.get(0), children.get(1)); + } + + @Override + public List getSignatures() { + return SIGNATURES; + } + + @Override + public R accept(ExpressionVisitor visitor, C context) { + return visitor.visitWeeksAdd(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WeeksSub.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WeeksSub.java new file mode 100644 index 0000000000..d70fbcc4b6 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WeeksSub.java @@ -0,0 +1,77 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.trees.expressions.functions.scalar; + +import org.apache.doris.catalog.FunctionSignature; +import org.apache.doris.common.Config; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable; +import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; +import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.DateTimeType; +import org.apache.doris.nereids.types.DateTimeV2Type; +import org.apache.doris.nereids.types.DateType; +import org.apache.doris.nereids.types.DateV2Type; +import org.apache.doris.nereids.types.IntegerType; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * ScalarFunction 'weeks_sub'. + */ +public class WeeksSub extends ScalarFunction implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable { + //When enable_date_conversion is true, we prefer to V2 signature. + // This preference follows original planner. refer to ScalarType.getDefaultDateType() + public static final List SIGNATURES = Config.enable_date_conversion ? ImmutableList.of( + FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT) + .args(DateTimeV2Type.SYSTEM_DEFAULT, IntegerType.INSTANCE), + FunctionSignature.ret(DateV2Type.INSTANCE).args(DateV2Type.INSTANCE, IntegerType.INSTANCE), + FunctionSignature.ret(DateTimeType.INSTANCE).args(DateTimeType.INSTANCE, IntegerType.INSTANCE), + FunctionSignature.ret(DateType.INSTANCE).args(DateType.INSTANCE, IntegerType.INSTANCE) + ) : ImmutableList.of( + FunctionSignature.ret(DateTimeType.INSTANCE).args(DateTimeType.INSTANCE, IntegerType.INSTANCE), + FunctionSignature.ret(DateType.INSTANCE).args(DateType.INSTANCE, IntegerType.INSTANCE), + FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT) + .args(DateTimeV2Type.SYSTEM_DEFAULT, IntegerType.INSTANCE), + FunctionSignature.ret(DateV2Type.INSTANCE).args(DateV2Type.INSTANCE, IntegerType.INSTANCE) + ); + + public WeeksSub(Expression arg0, Expression arg1) { + super("weeks_sub", arg0, arg1); + } + + @Override + public WeeksSub withChildren(List children) { + Preconditions.checkArgument(children.size() == 2); + return new WeeksSub(children.get(0), children.get(1)); + } + + @Override + public List getSignatures() { + return SIGNATURES; + } + + @Override + public R accept(ExpressionVisitor visitor, C context) { + return visitor.visitWeeksSub(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java index 0b8fb96d20..8c5be76f3d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java @@ -315,7 +315,9 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.WeekCeil; import org.apache.doris.nereids.trees.expressions.functions.scalar.WeekFloor; import org.apache.doris.nereids.trees.expressions.functions.scalar.WeekOfYear; import org.apache.doris.nereids.trees.expressions.functions.scalar.Weekday; +import org.apache.doris.nereids.trees.expressions.functions.scalar.WeeksAdd; import org.apache.doris.nereids.trees.expressions.functions.scalar.WeeksDiff; +import org.apache.doris.nereids.trees.expressions.functions.scalar.WeeksSub; import org.apache.doris.nereids.trees.expressions.functions.scalar.Year; import org.apache.doris.nereids.trees.expressions.functions.scalar.YearCeil; import org.apache.doris.nereids.trees.expressions.functions.scalar.YearFloor; @@ -1525,10 +1527,18 @@ public interface ScalarFunctionVisitor { return visitScalarFunction(weekday, context); } + default R visitWeeksAdd(WeeksAdd weeksAdd, C context) { + return visitScalarFunction(weeksAdd, context); + } + default R visitWeeksDiff(WeeksDiff weeksDiff, C context) { return visitScalarFunction(weeksDiff, context); } + default R visitWeeksSub(WeeksSub weeksSub, C context) { + return visitScalarFunction(weeksSub, context); + } + default R visitYear(Year year, C context) { return visitScalarFunction(year, context); } diff --git a/regression-test/data/nereids_syntax_p0/test_date_add.out b/regression-test/data/nereids_syntax_p0/test_date_add.out index 1b7181af54..4754e015d8 100644 --- a/regression-test/data/nereids_syntax_p0/test_date_add.out +++ b/regression-test/data/nereids_syntax_p0/test_date_add.out @@ -47,3 +47,39 @@ -- !select -- 2019-12-28T00:00 +-- !select -- +2022-01-01T00:00 + +-- !select -- +2016-01-01T00:00 + +-- !select -- +2020-03-01T00:00 + +-- !select -- +2019-09-01T00:00 + +-- !select -- +2020-01-15T00:00 + +-- !select -- +2019-12-04T00:00 + +-- !select -- +2020-01-01T02:00 + +-- !select -- +2019-12-31T20:00 + +-- !select -- +2020-01-01T00:02 + +-- !select -- +2019-12-31T23:56 + +-- !select -- +2020-01-01T00:00:02 + +-- !select -- +2019-12-31T23:59:56 + diff --git a/regression-test/data/nereids_syntax_p0/test_date_sub.out b/regression-test/data/nereids_syntax_p0/test_date_sub.out index ad0fec639e..cbaa9658a1 100644 --- a/regression-test/data/nereids_syntax_p0/test_date_sub.out +++ b/regression-test/data/nereids_syntax_p0/test_date_sub.out @@ -53,3 +53,39 @@ -- !select -- 2020-01-05T00:00 +-- !select -- +2018-01-01T00:00 + +-- !select -- +2024-01-01T00:00 + +-- !select -- +2019-11-01T00:00 + +-- !select -- +2020-05-01T00:00 + +-- !select -- +2019-12-18T00:00 + +-- !select -- +2020-01-29T00:00 + +-- !select -- +2019-12-31T22:00 + +-- !select -- +2020-01-01T04:00 + +-- !select -- +2019-12-31T23:58 + +-- !select -- +2020-01-01T00:04 + +-- !select -- +2019-12-31T23:59:58 + +-- !select -- +2020-01-01T00:00:04 + diff --git a/regression-test/suites/nereids_syntax_p0/test_date_add.groovy b/regression-test/suites/nereids_syntax_p0/test_date_add.groovy index 998b6962da..8eb716ac36 100644 --- a/regression-test/suites/nereids_syntax_p0/test_date_add.groovy +++ b/regression-test/suites/nereids_syntax_p0/test_date_add.groovy @@ -38,4 +38,22 @@ suite("test_date_add") { qt_select "SELECT ADDDATE('2020-01-01', interval 2 day)" qt_select "SELECT DAYS_ADD('2020-01-01', 2)" qt_select "SELECT DAYS_ADD('2020-01-01', -4)" + + qt_select "SELECT YEARS_ADD('2020-01-01', 2)" + qt_select "SELECT YEARS_ADD('2020-01-01', -4)" + + qt_select "SELECT MONTHS_ADD('2020-01-01', 2)" + qt_select "SELECT MONTHS_ADD('2020-01-01', -4)" + + qt_select "SELECT WEEKS_ADD('2020-01-01', 2)" + qt_select "SELECT WEEKS_ADD('2020-01-01', -4)" + + qt_select "SELECT HOURS_ADD('2020-01-01', 2)" + qt_select "SELECT HOURS_ADD('2020-01-01', -4)" + + qt_select "SELECT MINUTES_ADD('2020-01-01', 2)" + qt_select "SELECT MINUTES_ADD('2020-01-01', -4)" + + qt_select "SELECT SECONDS_ADD('2020-01-01', 2)" + qt_select "SELECT SECONDS_ADD('2020-01-01', -4)" } \ No newline at end of file diff --git a/regression-test/suites/nereids_syntax_p0/test_date_sub.groovy b/regression-test/suites/nereids_syntax_p0/test_date_sub.groovy index 3c54d1765c..2483a940c9 100644 --- a/regression-test/suites/nereids_syntax_p0/test_date_sub.groovy +++ b/regression-test/suites/nereids_syntax_p0/test_date_sub.groovy @@ -18,6 +18,7 @@ suite("test_date_sub") { sql "set enable_nereids_planner=true" sql "set enable_fallback_to_original_planner=false" + sql "set enable_fold_constant_by_be=false" qt_select "select DAYS_SUB(cast('2020-01-01' as date), interval 2 year)" qt_select "select DAYS_SUB(cast('2020-01-01' as datev2),interval 2 year)" @@ -39,4 +40,22 @@ suite("test_date_sub") { qt_select "SELECT SUBDATE('2020-01-01', interval 2 day)" qt_select "SELECT DAYS_SUB('2020-01-01', 2)" qt_select "SELECT DAYS_SUB('2020-01-01', -4)" + + qt_select "SELECT YEARS_SUB('2020-01-01', 2)" + qt_select "SELECT YEARS_SUB('2020-01-01', -4)" + + qt_select "SELECT MONTHS_SUB('2020-01-01', 2)" + qt_select "SELECT MONTHS_SUB('2020-01-01', -4)" + + qt_select "SELECT WEEKS_SUB('2020-01-01', 2)" + qt_select "SELECT WEEKS_SUB('2020-01-01', -4)" + + qt_select "SELECT HOURS_SUB('2020-01-01', 2)" + qt_select "SELECT HOURS_SUB('2020-01-01', -4)" + + qt_select "SELECT MINUTES_SUB('2020-01-01', 2)" + qt_select "SELECT MINUTES_SUB('2020-01-01', -4)" + + qt_select "SELECT SECONDS_SUB('2020-01-01', 2)" + qt_select "SELECT SECONDS_SUB('2020-01-01', -4)" } \ No newline at end of file