This is an automated email from the ASF dual-hosted git repository.
lihaopeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 0830ecb2e9e [fix](function) add time type in conditional-functions
(#41270)
0830ecb2e9e is described below
commit 0830ecb2e9ea537ac6ff1ba948461fd00022bf7f
Author: Mryange <[email protected]>
AuthorDate: Thu Sep 26 22:27:32 2024 +0800
[fix](function) add time type in conditional-functions (#41270)
before
```
mysql [(none)]>select sec_to_time(time_to_sec(cast('2024-09-24 16:00:00' as
varchar)));
+---------------------------------------------------------------------------------------+
| sec_to_time(time_to_sec(cast(cast('2024-09-24 16:00:00' as
VARCHAR(65533)) as TIME))) |
+---------------------------------------------------------------------------------------+
| 16:00:00
|
+---------------------------------------------------------------------------------------+
mysql [(none)]>select ifnull(sec_to_time(time_to_sec(cast('2024-09-24
16:00:00' as varchar))), cast(300 as time));
+--------------------------------------------------------------------------------------------------------------------------------------------------+
| ifnull(cast(sec_to_time(time_to_sec(cast(cast('2024-09-24 16:00:00' as
VARCHAR(65533)) as TIME))) as DOUBLE), cast(cast(300 as TIME) as DOUBLE)) |
+--------------------------------------------------------------------------------------------------------------------------------------------------+
|
57600000000 |
+--------------------------------------------------------------------------------------------------------------------------------------------------+
```
now
```
mysql [(none)]>select ifnull(sec_to_time(time_to_sec(cast('2024-09-24
16:00:00' as varchar))), cast(300 as time));
+------------------------------------------------------------------------------------------------------------------+
| ifnull(sec_to_time(time_to_sec(cast(cast('2024-09-24 16:00:00' as
VARCHAR(65533)) as TIME))), cast(300 as TIME)) |
+------------------------------------------------------------------------------------------------------------------+
| 16:00:00
|
+------------------------------------------------------------------------------------------------------------------+
```
---
.../nereids/trees/expressions/functions/scalar/Coalesce.java | 4 ++++
.../doris/nereids/trees/expressions/functions/scalar/If.java | 9 ++++++++-
.../nereids/trees/expressions/functions/scalar/NullIf.java | 4 ++++
.../nereids/trees/expressions/functions/scalar/Nvl.java | 8 +++++++-
.../data/correctness_p0/test_case_when_decimal.out | 6 ++++++
.../suites/correctness_p0/test_case_when_decimal.groovy | 12 ++++++++++++
6 files changed, 41 insertions(+), 2 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Coalesce.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Coalesce.java
index f1d122d0179..2ed864ba9a0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Coalesce.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Coalesce.java
@@ -36,6 +36,8 @@ import org.apache.doris.nereids.types.IntegerType;
import org.apache.doris.nereids.types.LargeIntType;
import org.apache.doris.nereids.types.SmallIntType;
import org.apache.doris.nereids.types.StringType;
+import org.apache.doris.nereids.types.TimeType;
+import org.apache.doris.nereids.types.TimeV2Type;
import org.apache.doris.nereids.types.TinyIntType;
import org.apache.doris.nereids.types.VarcharType;
import org.apache.doris.nereids.util.ExpressionUtils;
@@ -64,6 +66,8 @@ public class Coalesce extends ScalarFunction
FunctionSignature.ret(DateTimeType.INSTANCE).varArgs(DateTimeType.INSTANCE),
FunctionSignature.ret(DateV2Type.INSTANCE).varArgs(DateV2Type.INSTANCE),
FunctionSignature.ret(DateType.INSTANCE).varArgs(DateType.INSTANCE),
+
FunctionSignature.ret(TimeType.INSTANCE).varArgs(TimeType.INSTANCE),
+
FunctionSignature.ret(TimeV2Type.INSTANCE).varArgs(TimeV2Type.INSTANCE),
FunctionSignature.ret(DecimalV3Type.WILDCARD).varArgs(DecimalV3Type.WILDCARD),
FunctionSignature.ret(DecimalV2Type.SYSTEM_DEFAULT).varArgs(DecimalV2Type.SYSTEM_DEFAULT),
FunctionSignature.ret(BitmapType.INSTANCE).varArgs(BitmapType.INSTANCE),
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/If.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/If.java
index 4b6f62f6bc8..655649822c8 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/If.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/If.java
@@ -43,6 +43,8 @@ import org.apache.doris.nereids.types.MapType;
import org.apache.doris.nereids.types.NullType;
import org.apache.doris.nereids.types.SmallIntType;
import org.apache.doris.nereids.types.StringType;
+import org.apache.doris.nereids.types.TimeType;
+import org.apache.doris.nereids.types.TimeV2Type;
import org.apache.doris.nereids.types.TinyIntType;
import org.apache.doris.nereids.types.VarcharType;
import org.apache.doris.nereids.types.coercion.AnyDataType;
@@ -84,7 +86,12 @@ public class If extends ScalarFunction
.args(BooleanType.INSTANCE, DoubleType.INSTANCE,
DoubleType.INSTANCE),
FunctionSignature.ret(DateTimeType.INSTANCE)
.args(BooleanType.INSTANCE, DateTimeType.INSTANCE,
DateTimeType.INSTANCE),
-
FunctionSignature.ret(DateType.INSTANCE).args(BooleanType.INSTANCE,
DateType.INSTANCE, DateType.INSTANCE),
+
FunctionSignature.ret(DateType.INSTANCE).args(BooleanType.INSTANCE,
DateType.INSTANCE,
+ DateType.INSTANCE),
+
FunctionSignature.ret(TimeType.INSTANCE).args(BooleanType.INSTANCE,
TimeType.INSTANCE,
+ TimeType.INSTANCE),
+
FunctionSignature.ret(TimeV2Type.INSTANCE).args(BooleanType.INSTANCE,
TimeV2Type.INSTANCE,
+ TimeV2Type.INSTANCE),
FunctionSignature.ret(DecimalV3Type.WILDCARD)
.args(BooleanType.INSTANCE, DecimalV3Type.WILDCARD,
DecimalV3Type.WILDCARD),
FunctionSignature.ret(DecimalV2Type.SYSTEM_DEFAULT)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/NullIf.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/NullIf.java
index 447e60a752f..fe6164dc085 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/NullIf.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/NullIf.java
@@ -37,6 +37,8 @@ import org.apache.doris.nereids.types.IntegerType;
import org.apache.doris.nereids.types.LargeIntType;
import org.apache.doris.nereids.types.SmallIntType;
import org.apache.doris.nereids.types.StringType;
+import org.apache.doris.nereids.types.TimeType;
+import org.apache.doris.nereids.types.TimeV2Type;
import org.apache.doris.nereids.types.TinyIntType;
import org.apache.doris.nereids.types.VarcharType;
@@ -65,6 +67,8 @@ public class NullIf extends ScalarFunction
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT)
.args(DateTimeV2Type.SYSTEM_DEFAULT,
DateTimeV2Type.SYSTEM_DEFAULT),
FunctionSignature.ret(DateV2Type.INSTANCE).args(DateV2Type.INSTANCE,
DateV2Type.INSTANCE),
+ FunctionSignature.ret(TimeType.INSTANCE).args(TimeType.INSTANCE,
TimeType.INSTANCE),
+
FunctionSignature.ret(TimeV2Type.INSTANCE).args(TimeV2Type.INSTANCE,
TimeV2Type.INSTANCE),
FunctionSignature.ret(DecimalV2Type.SYSTEM_DEFAULT)
.args(DecimalV2Type.SYSTEM_DEFAULT,
DecimalV2Type.SYSTEM_DEFAULT),
FunctionSignature.ret(DecimalV3Type.WILDCARD)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Nvl.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Nvl.java
index e3d0335cbc3..658e05f1148 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Nvl.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Nvl.java
@@ -36,6 +36,8 @@ import org.apache.doris.nereids.types.IntegerType;
import org.apache.doris.nereids.types.LargeIntType;
import org.apache.doris.nereids.types.SmallIntType;
import org.apache.doris.nereids.types.StringType;
+import org.apache.doris.nereids.types.TimeType;
+import org.apache.doris.nereids.types.TimeV2Type;
import org.apache.doris.nereids.types.TinyIntType;
import org.apache.doris.nereids.types.VarcharType;
@@ -65,7 +67,11 @@ public class Nvl extends ScalarFunction
FunctionSignature.ret(DateTimeV2Type.SYSTEM_DEFAULT)
.args(DateTimeV2Type.SYSTEM_DEFAULT,
DateTimeV2Type.SYSTEM_DEFAULT),
FunctionSignature.ret(DateV2Type.INSTANCE)
- .args(DateV2Type.INSTANCE, DateV2Type.INSTANCE),
+ .args(DateV2Type.INSTANCE, DateV2Type.INSTANCE),
+ FunctionSignature.ret(TimeType.INSTANCE)
+ .args(TimeType.INSTANCE, TimeType.INSTANCE),
+ FunctionSignature.ret(TimeV2Type.INSTANCE)
+ .args(TimeV2Type.INSTANCE, TimeV2Type.INSTANCE),
FunctionSignature.ret(BitmapType.INSTANCE).args(BitmapType.INSTANCE,
BitmapType.INSTANCE),
FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT)
.args(VarcharType.SYSTEM_DEFAULT,
VarcharType.SYSTEM_DEFAULT),
diff --git a/regression-test/data/correctness_p0/test_case_when_decimal.out
b/regression-test/data/correctness_p0/test_case_when_decimal.out
index 1a888306ed3..ba416b026bf 100644
--- a/regression-test/data/correctness_p0/test_case_when_decimal.out
+++ b/regression-test/data/correctness_p0/test_case_when_decimal.out
@@ -8,3 +8,9 @@
-- !sql3 --
4.41
+-- !sql4 --
+00:01:23 00:01:23 00:01:23 00:01:23
+
+-- !sql5 --
+00:01:23 00:01:23 00:01:23 00:01:23
+
diff --git
a/regression-test/suites/correctness_p0/test_case_when_decimal.groovy
b/regression-test/suites/correctness_p0/test_case_when_decimal.groovy
index baf7f52690e..4f120f06bbd 100644
--- a/regression-test/suites/correctness_p0/test_case_when_decimal.groovy
+++ b/regression-test/suites/correctness_p0/test_case_when_decimal.groovy
@@ -97,4 +97,16 @@ suite("test_case_when_decimal") {
sql """ DROP TABLE IF EXISTS `decimal_to_double_table1`; """
sql """ DROP TABLE IF EXISTS `decimal_to_double_table2`; """
+
+ sql """ set debug_skip_fold_constant = true; """
+
+ qt_sql4 """
+ select ifnull(cast(123 as time) , cast(300 as time)) ,
coalesce(cast(123 as time) , cast(300 as time)) , if(true ,cast(123 as time) ,
cast(300 as time)) , nullif(cast(123 as time) , cast(300 as time));
+ """
+
+ sql """ set debug_skip_fold_constant = false; """
+
+ qt_sql5 """
+ select ifnull(cast(123 as time) , cast(300 as time)) ,
coalesce(cast(123 as time) , cast(300 as time)) , if(true ,cast(123 as time) ,
cast(300 as time)) , nullif(cast(123 as time) , cast(300 as time));
+ """
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]