This is an automated email from the ASF dual-hosted git repository.

kxiao 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 79289e32dc [fix](cast) fix wrong result of casting empty string to 
array date (#22281)
79289e32dc is described below

commit 79289e32dc0e7e0091301d676209fd0cd822483a
Author: TengJianPing <18241664+jackte...@users.noreply.github.com>
AuthorDate: Sun Jul 30 21:15:03 2023 +0800

    [fix](cast) fix wrong result of casting empty string to array date (#22281)
---
 be/src/vec/data_types/data_type_time_v2.cpp             | 12 ------------
 be/src/vec/runtime/vdatetime_value.cpp                  |  6 ++++++
 .../cast_function/test_cast_string_to_array.out         | 17 ++++++++++++++++-
 .../cast_function/test_cast_string_to_array.groovy      |  9 +++++++++
 4 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/be/src/vec/data_types/data_type_time_v2.cpp 
b/be/src/vec/data_types/data_type_time_v2.cpp
index 06275d029c..c4b397f6e7 100644
--- a/be/src/vec/data_types/data_type_time_v2.cpp
+++ b/be/src/vec/data_types/data_type_time_v2.cpp
@@ -67,12 +67,6 @@ void DataTypeDateV2::to_string(const IColumn& column, size_t 
row_num, BufferWrit
 
     UInt32 int_val = assert_cast<const 
ColumnUInt32&>(*ptr).get_element(row_num);
     DateV2Value<DateV2ValueType> val = binary_cast<UInt32, 
DateV2Value<DateV2ValueType>>(int_val);
-    // if this is an invalid date, write nothing(instead of 0000-00-00) to 
output string, or else
-    // it will cause problem for null DataTypeDateV2 value in cast function,
-    // e.g. cast(cast(null_date as char) as date)
-    if (!val.is_valid_date()) {
-        return;
-    }
 
     char buf[64];
     char* pos = val.to_string(buf);
@@ -150,12 +144,6 @@ void DataTypeDateTimeV2::to_string(const IColumn& column, 
size_t row_num,
     UInt64 int_val = assert_cast<const 
ColumnUInt64&>(*ptr).get_element(row_num);
     DateV2Value<DateTimeV2ValueType> val =
             binary_cast<UInt64, DateV2Value<DateTimeV2ValueType>>(int_val);
-    // if this is an invalid date, write nothing(instead of 0000-00-00) to 
output string, or else
-    // it will cause problem for null DataTypeDateV2 value in cast function,
-    // e.g. cast(cast(null_date as char) as date)
-    if (!val.is_valid_date()) {
-        return;
-    }
 
     char buf[64];
     char* pos = val.to_string(buf, _scale);
diff --git a/be/src/vec/runtime/vdatetime_value.cpp 
b/be/src/vec/runtime/vdatetime_value.cpp
index a8db4d6f66..8aaa51a376 100644
--- a/be/src/vec/runtime/vdatetime_value.cpp
+++ b/be/src/vec/runtime/vdatetime_value.cpp
@@ -2406,6 +2406,12 @@ bool DateV2Value<T>::from_date_format_str(const char* 
format, int format_len, co
 
 template <typename T>
 int32_t DateV2Value<T>::to_buffer(char* buffer, int scale) const {
+    // if this is an invalid date, write nothing(instead of 0000-00-00) to 
output string, or else
+    // it will cause problem for null DataTypeDateV2 value in cast function,
+    // e.g. cast(cast(null_date as char) as date)
+    if (!is_valid_date()) {
+        return 0;
+    }
     char* start = buffer;
     uint32_t temp;
     // Year
diff --git 
a/regression-test/data/query_p0/sql_functions/cast_function/test_cast_string_to_array.out
 
b/regression-test/data/query_p0/sql_functions/cast_function/test_cast_string_to_array.out
index 1c2a470c90..7a6acbd024 100644
--- 
a/regression-test/data/query_p0/sql_functions/cast_function/test_cast_string_to_array.out
+++ 
b/regression-test/data/query_p0/sql_functions/cast_function/test_cast_string_to_array.out
@@ -30,5 +30,20 @@
 [1.340, 2.010, 0.000, 0.000, 0.000]
 
 -- !sql --
-[2022-09-01, 0000-00-00, 0000-00-00]
+[2022-09-01, , ]
+
+-- !sql --
+["2022-09-01", "", ""]
+
+-- !sql --
+[2022-09-01, NULL, NULL]
+
+-- !sql --
+[2022-09-01, , ]
+
+-- !sql --
+["2022-09-01", "", ""]
+
+-- !sql --
+[2022-09-01, NULL, NULL]
 
diff --git 
a/regression-test/suites/query_p0/sql_functions/cast_function/test_cast_string_to_array.groovy
 
b/regression-test/suites/query_p0/sql_functions/cast_function/test_cast_string_to_array.groovy
index d9c5ee3546..b246fb5534 100644
--- 
a/regression-test/suites/query_p0/sql_functions/cast_function/test_cast_string_to_array.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/cast_function/test_cast_string_to_array.groovy
@@ -41,5 +41,14 @@ suite("test_cast_string_to_array") {
     qt_sql """ select cast ("[1,2,3,,,]" as array<int>) """
     qt_sql """ select cast ("[a,b,c,,,]" as array<string>) """
     qt_sql """ select cast ("[1.34,2.01,,,]" as array<decimal(10, 3)>) """
+
+    sql """ ADMIN SET FRONTEND CONFIG ("enable_date_conversion" = "false"); """
+    qt_sql """ select cast ("[2022-09-01,,]" as array<date>) """
+    qt_sql """ select cast ("[2022-09-01,,]" as array<string>) """
+    qt_sql """ select cast(cast ("[2022-09-01,,]" as array<string>) as 
array<date>) """
+
+    sql """ ADMIN SET FRONTEND CONFIG ("enable_date_conversion" = "true"); """
     qt_sql """ select cast ("[2022-09-01,,]" as array<date>) """
+    qt_sql """ select cast ("[2022-09-01,,]" as array<string>) """
+    qt_sql """ select cast(cast ("[2022-09-01,,]" as array<string>) as 
array<date>) """
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to