[fix](planner)date_add function should accept date type as its param (#34035)

This commit is contained in:
starocean999
2024-04-26 09:38:10 +08:00
committed by yiguolei
parent 5adc823b14
commit a34ed4643a
3 changed files with 22 additions and 1 deletions

View File

@ -1658,6 +1658,22 @@ public class FunctionCallExpr extends Expr {
}
fn = getBuiltinFunction(fnName.getFunction(), argTypes,
Function.CompareMode.IS_NONSTRICT_SUPERTYPE_OF);
} else if (fnName.getFunction().equalsIgnoreCase("date_add")
|| fnName.getFunction().equalsIgnoreCase("days_add")
|| fnName.getFunction().equalsIgnoreCase("adddate")
|| fnName.getFunction().equalsIgnoreCase("date_sub")
|| fnName.getFunction().equalsIgnoreCase("days_sub")
|| fnName.getFunction().equalsIgnoreCase("subdate")) {
Type[] childTypes = collectChildReturnTypes();
argTypes[0] = childTypes[0];
argTypes[1] = childTypes[1];
if (childTypes[1] == Type.TINYINT || childTypes[1] == Type.SMALLINT) {
// be only support second param as int type
uncheckedCastChild(Type.INT, 1);
argTypes[1] = Type.INT;
}
fn = getBuiltinFunction(fnName.getFunction(), argTypes,
Function.CompareMode.IS_NONSTRICT_SUPERTYPE_OF);
} else {
// now first find table function in table function sets
if (isTableFnCall) {

View File

@ -1080,6 +1080,8 @@ visible_functions = {
[['weeks_sub'], 'DATEV2', ['DATEV2', 'INT'], ''],
[['days_add', 'date_add', 'adddate'], 'DATEV2', ['DATEV2', 'INT'], ''],
[['days_sub', 'date_sub', 'subdate'], 'DATEV2', ['DATEV2', 'INT'], ''],
[['days_add', 'date_add', 'adddate'], 'DATE', ['DATE', 'INT'], ''],
[['days_sub', 'date_sub', 'subdate'], 'DATE', ['DATE', 'INT'], ''],
[['hours_add'], 'DATETIMEV2', ['DATEV2', 'INT'], ''],
[['hours_sub'], 'DATETIMEV2', ['DATEV2', 'INT'], ''],
[['minutes_add'], 'DATETIMEV2', ['DATEV2', 'INT'], ''],

View File

@ -57,5 +57,8 @@ suite("test_date_function_const") {
qt_select10 """
select hours_add(cast('2023-03-30 22:23:45.23452' as datetimev2(6)),8)
"""
explain {
sql("""select date_add(CURRENT_DATE(),-2);""")
notContains("00:00:00")
}
}