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 <59914473+mrya...@users.noreply.github.com>
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: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to