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

yiguolei pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new ae9f70a87bd [Bug](fix) str_to_date "" should be null (#29476)
ae9f70a87bd is described below

commit ae9f70a87bd356ebc62dc9ed60e4bc995c96c9db
Author: HappenLee <happen...@hotmail.com>
AuthorDate: Wed Jan 3 23:15:47 2024 +0800

    [Bug](fix) str_to_date "" should be null (#29476)
---
 be/src/vec/functions/function_timestamp.cpp                 | 13 +++++++------
 be/src/vec/runtime/vdatetime_value.cpp                      |  4 ++++
 .../sql_functions/datetime_functions/test_date_function.out |  3 +++
 .../datetime_functions/test_date_function.groovy            |  1 +
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/be/src/vec/functions/function_timestamp.cpp 
b/be/src/vec/functions/function_timestamp.cpp
index 9a42569dde4..d698cee3dce 100644
--- a/be/src/vec/functions/function_timestamp.cpp
+++ b/be/src/vec/functions/function_timestamp.cpp
@@ -216,12 +216,13 @@ private:
         auto& ts_val = *reinterpret_cast<DateValueType*>(&res[index]);
         if (!ts_val.from_date_format_str(r_raw_str, r_str_size, l_raw_str, 
l_str_size)) {
             null_map[index] = 1;
-        }
-        if constexpr (std::is_same_v<DateValueType, VecDateTimeValue>) {
-            if (context->get_return_type().type == 
doris::PrimitiveType::TYPE_DATETIME) {
-                ts_val.to_datetime();
-            } else {
-                ts_val.cast_to_date();
+        } else {
+            if constexpr (std::is_same_v<DateValueType, VecDateTimeValue>) {
+                if (context->get_return_type().type == 
doris::PrimitiveType::TYPE_DATETIME) {
+                    ts_val.to_datetime();
+                } else {
+                    ts_val.cast_to_date();
+                }
             }
         }
     }
diff --git a/be/src/vec/runtime/vdatetime_value.cpp 
b/be/src/vec/runtime/vdatetime_value.cpp
index d4aa060af30..e7c8d0915d9 100644
--- a/be/src/vec/runtime/vdatetime_value.cpp
+++ b/be/src/vec/runtime/vdatetime_value.cpp
@@ -2477,6 +2477,10 @@ bool DateV2Value<T>::from_date_format_str(const char* 
format, int format_len, co
         }
     }
 
+    // ptr == format means input value string is "", not do parse format 
failed here
+    if (ptr == format) {
+        return false;
+    }
     // continue to iterate pattern if has
     // to find out if it has time part.
     while (ptr < end) {
diff --git 
a/regression-test/data/query_p0/sql_functions/datetime_functions/test_date_function.out
 
b/regression-test/data/query_p0/sql_functions/datetime_functions/test_date_function.out
index 9858f809ea0..40c2dda3ec8 100644
--- 
a/regression-test/data/query_p0/sql_functions/datetime_functions/test_date_function.out
+++ 
b/regression-test/data/query_p0/sql_functions/datetime_functions/test_date_function.out
@@ -269,6 +269,9 @@ February
 -- !sql --
 2014-12-21T12:34:56
 
+-- !sql --
+\N
+
 -- !sql --
 2014-12-21T12:34:56
 
diff --git 
a/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy
 
b/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy
index 6647728c0d1..3d34c67a938 100644
--- 
a/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/datetime_functions/test_date_function.groovy
@@ -329,6 +329,7 @@ suite("test_date_function") {
     sql """ truncate table ${tableName} """
     sql """ insert into ${tableName} values ("2014-12-21 12:34:56")  """
     qt_sql """ select str_to_date(test_datetime, '%Y-%m-%d %H:%i:%s') from 
${tableName}; """
+    qt_sql """ select str_to_date("", "%Y-%m-%d %H:%i:%s"); """
     qt_sql """ select str_to_date("2014-12-21 12:34%3A56", '%Y-%m-%d 
%H:%i%%3A%s'); """
     qt_sql """ select str_to_date("2014-12-21 12:34:56.789 PM", '%Y-%m-%d 
%h:%i:%s.%f %p'); """
     qt_sql """ select 
str_to_date('2023-07-05T02:09:55.880Z','%Y-%m-%dT%H:%i:%s.%fZ') """


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

Reply via email to