From 1ea11aa120d6108bc01c3fadaa02a1d965a03ca3 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Tue, 17 Jan 2023 10:18:20 +0800 Subject: [PATCH] [Bug](datev2) Fix wrong cast expr (#15985) Found by regression tests when I turn on enable_date_conversion --- .../apache/doris/analysis/StringLiteral.java | 5 +- .../analysis/TimestampArithmeticExpr.java | 7 +- gensrc/script/doris_builtins_functions.py | 88 ------------------- 3 files changed, 4 insertions(+), 96 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/StringLiteral.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/StringLiteral.java index bd8867b810..1094ca6564 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/StringLiteral.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/StringLiteral.java @@ -21,7 +21,6 @@ package org.apache.doris.analysis; import org.apache.doris.catalog.PrimitiveType; -import org.apache.doris.catalog.ScalarType; import org.apache.doris.catalog.Type; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.DdlException; @@ -185,8 +184,8 @@ public class StringLiteral extends LiteralExpr { newLiteral = new DateLiteral(value, targetType); } catch (AnalysisException e) { if (targetType.isScalarType(PrimitiveType.DATETIME)) { - newLiteral = new DateLiteral(value, ScalarType.getDefaultDateType(Type.DATE)); - newLiteral.setType(ScalarType.getDefaultDateType(Type.DATETIME)); + newLiteral = new DateLiteral(value, Type.DATE); + newLiteral.setType(Type.DATETIME); } else if (targetType.isScalarType(PrimitiveType.DATETIMEV2)) { newLiteral = new DateLiteral(value, Type.DATEV2); newLiteral.setType(targetType); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TimestampArithmeticExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TimestampArithmeticExpr.java index 2fc7850abc..ca2c098f34 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TimestampArithmeticExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TimestampArithmeticExpr.java @@ -285,11 +285,8 @@ public class TimestampArithmeticExpr extends Expr { for (int i = 0; i < childrenTypes.length; ++i) { // For varargs, we must compare with the last type in callArgs.argTypes. int ix = Math.min(argTypes.length - 1, i); - if (!childrenTypes[i].matchesType(argTypes[ix]) && Config.enable_date_conversion - && !childrenTypes[i].isDateType() && (argTypes[ix].isDate() || argTypes[ix].isDatetime())) { - uncheckedCastChild(ScalarType.getDefaultDateType(argTypes[ix]), i); - } else if (!childrenTypes[i].matchesType(argTypes[ix]) && !( - childrenTypes[i].isDateType() && argTypes[ix].isDateType())) { + if (!childrenTypes[i].matchesType(argTypes[ix]) && !( + childrenTypes[i].isDateOrDateTime() && argTypes[ix].isDateOrDateTime())) { uncheckedCastChild(argTypes[ix], i); } } diff --git a/gensrc/script/doris_builtins_functions.py b/gensrc/script/doris_builtins_functions.py index 18380f8320..e353e44a5b 100755 --- a/gensrc/script/doris_builtins_functions.py +++ b/gensrc/script/doris_builtins_functions.py @@ -1435,94 +1435,6 @@ visible_functions = [ '_ZN5doris18TimestampFunctions12seconds_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', '', '', 'vec', 'ALWAYS_NULLABLE'], - [['years_diff'], 'BIGINT', ['DATEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions10years_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['months_diff'], 'BIGINT', ['DATEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions11months_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['weeks_diff'], 'BIGINT', ['DATEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions10weeks_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['days_diff'], 'BIGINT', ['DATEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions9days_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['hours_diff'], 'BIGINT', ['DATEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions10hours_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['minutes_diff'], 'BIGINT', ['DATEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions12minutes_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['seconds_diff'], 'BIGINT', ['DATEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions12seconds_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - - [['years_diff'], 'BIGINT', ['DATETIME', 'DATEV2'], - '_ZN5doris18TimestampFunctions10years_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['months_diff'], 'BIGINT', ['DATETIME', 'DATEV2'], - '_ZN5doris18TimestampFunctions11months_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['weeks_diff'], 'BIGINT', ['DATETIME', 'DATEV2'], - '_ZN5doris18TimestampFunctions10weeks_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['days_diff'], 'BIGINT', ['DATETIME', 'DATEV2'], - '_ZN5doris18TimestampFunctions9days_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['hours_diff'], 'BIGINT', ['DATETIME', 'DATEV2'], - '_ZN5doris18TimestampFunctions10hours_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['minutes_diff'], 'BIGINT', ['DATETIME', 'DATEV2'], - '_ZN5doris18TimestampFunctions12minutes_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['seconds_diff'], 'BIGINT', ['DATETIME', 'DATEV2'], - '_ZN5doris18TimestampFunctions12seconds_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - - [['years_diff'], 'BIGINT', ['DATETIMEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions10years_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['months_diff'], 'BIGINT', ['DATETIMEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions11months_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['weeks_diff'], 'BIGINT', ['DATETIMEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions10weeks_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['days_diff'], 'BIGINT', ['DATETIMEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions9days_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['hours_diff'], 'BIGINT', ['DATETIMEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions10hours_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['minutes_diff'], 'BIGINT', ['DATETIMEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions12minutes_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['seconds_diff'], 'BIGINT', ['DATETIMEV2', 'DATETIME'], - '_ZN5doris18TimestampFunctions12seconds_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - - [['years_diff'], 'BIGINT', ['DATETIME', 'DATETIMEV2'], - '_ZN5doris18TimestampFunctions10years_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['months_diff'], 'BIGINT', ['DATETIME', 'DATETIMEV2'], - '_ZN5doris18TimestampFunctions11months_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['weeks_diff'], 'BIGINT', ['DATETIME', 'DATETIMEV2'], - '_ZN5doris18TimestampFunctions10weeks_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['days_diff'], 'BIGINT', ['DATETIME', 'DATETIMEV2'], - '_ZN5doris18TimestampFunctions9days_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['hours_diff'], 'BIGINT', ['DATETIME', 'DATETIMEV2'], - '_ZN5doris18TimestampFunctions10hours_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['minutes_diff'], 'BIGINT', ['DATETIME', 'DATETIMEV2'], - '_ZN5doris18TimestampFunctions12minutes_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['seconds_diff'], 'BIGINT', ['DATETIME', 'DATETIMEV2'], - '_ZN5doris18TimestampFunctions12seconds_diffEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValES6_', - '', '', 'vec', 'ALWAYS_NULLABLE'], - [['year_floor'], 'DATETIMEV2', ['DATETIMEV2'], '_ZN5doris18TimestampFunctions10year_floorEPN9doris_udf15FunctionContextERKNS1_11DateTimeV2ValE', '', '', 'vec', 'ALWAYS_NULLABLE'],