[opt](Nereids) add date_add/sub function (#16048)
1. add week_add week_diff function 2. register all date_add/date_diff function
This commit is contained in:
@ -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();
|
||||
|
||||
@ -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<Object> {
|
||||
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<Object> {
|
||||
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
|
||||
|
||||
@ -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<FunctionSignature> 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<Expression> children) {
|
||||
Preconditions.checkArgument(children.size() == 2);
|
||||
return new WeeksAdd(children.get(0), children.get(1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FunctionSignature> getSignatures() {
|
||||
return SIGNATURES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
|
||||
return visitor.visitWeeksAdd(this, context);
|
||||
}
|
||||
}
|
||||
@ -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<FunctionSignature> 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<Expression> children) {
|
||||
Preconditions.checkArgument(children.size() == 2);
|
||||
return new WeeksSub(children.get(0), children.get(1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FunctionSignature> getSignatures() {
|
||||
return SIGNATURES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
|
||||
return visitor.visitWeeksSub(this, context);
|
||||
}
|
||||
}
|
||||
@ -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<R, C> {
|
||||
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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)"
|
||||
}
|
||||
@ -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)"
|
||||
}
|
||||
Reference in New Issue
Block a user