This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new e455bceb910 [fix](function) fix error result when STR_TO_DATE input all space (#4… (#48920) e455bceb910 is described below commit e455bceb910634bd1ea7dc1acfa92a3ac14e433e Author: Mryange <yanxuech...@selectdb.com> AuthorDate: Tue Mar 11 19:30:38 2025 +0800 [fix](function) fix error result when STR_TO_DATE input all space (#4… (#48920) …8872) https://github.com/apache/doris/pull/48872 before ``` mysql> select STR_TO_DATE (' ', '%Y-%m-%d %H:%i:%s'); +-----------------------------------------+ | STR_TO_DATE (' ', '%Y-%m-%d %H:%i:%s') | +-----------------------------------------+ | | +-----------------------------------------+ ``` now ``` mysql> select STR_TO_DATE (' ', '%Y-%m-%d %H:%i:%s'); +-----------------------------------------+ | STR_TO_DATE (' ', '%Y-%m-%d %H:%i:%s') | +-----------------------------------------+ | NULL | +-----------------------------------------+ ``` Problem Summary: None - Test <!-- At least one of them must be included. --> - [x] Regression test - [x] Unit Test - [ ] Manual test (add detailed scripts or steps below) - [ ] No need to test or manual test. Explain why: - [ ] This is a refactor/code format and no logic has been changed. - [ ] Previous test can cover this change. - [ ] No code files have been changed. - [ ] Other reason <!-- Add your reason? --> - Behavior changed: - [x] No. - [ ] Yes. <!-- Explain the behavior change --> - Does this need documentation? - [x] No. - [ ] Yes. <!-- Add document PR link here. eg: https://github.com/apache/doris-website/pull/1214 --> - [ ] Confirm the release note - [ ] Confirm test cases - [ ] Confirm document - [ ] Add branch pick label <!-- Add branch pick label that this PR should merge into --> ### What problem does this PR solve? Issue Number: close #xxx Related PR: #xxx Problem Summary: ### Release note None ### Check List (For Author) - Test <!-- At least one of them must be included. --> - [ ] Regression test - [ ] Unit Test - [ ] Manual test (add detailed scripts or steps below) - [ ] No need to test or manual test. Explain why: - [ ] This is a refactor/code format and no logic has been changed. - [ ] Previous test can cover this change. - [ ] No code files have been changed. - [ ] Other reason <!-- Add your reason? --> - Behavior changed: - [ ] No. - [ ] Yes. <!-- Explain the behavior change --> - Does this need documentation? - [ ] No. - [ ] Yes. <!-- Add document PR link here. eg: https://github.com/apache/doris-website/pull/1214 --> ### Check List (For Reviewer who merge this PR) - [ ] Confirm the release note - [ ] Confirm test cases - [ ] Confirm document - [ ] Add branch pick label <!-- Add branch pick label that this PR should merge into --> --- be/src/vec/runtime/vdatetime_value.cpp | 6 --- be/test/vec/runtime/vdatetime_value_test.cpp | 45 +++++++++++++++++++++ .../data/correctness/test_str_to_date.out | Bin 443 -> 471 bytes .../suites/correctness/test_str_to_date.groovy | 4 ++ 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/be/src/vec/runtime/vdatetime_value.cpp b/be/src/vec/runtime/vdatetime_value.cpp index 877573bcccb..7305def114e 100644 --- a/be/src/vec/runtime/vdatetime_value.cpp +++ b/be/src/vec/runtime/vdatetime_value.cpp @@ -1247,9 +1247,6 @@ bool VecDateTimeValue::from_date_format_str(const char* format, int format_len, while (val < val_end && check_space(*val)) { val++; } - if (val >= val_end) { - break; - } // Check switch if (*ptr == '%' && ptr + 1 < end) { const char* tmp = nullptr; @@ -2298,9 +2295,6 @@ bool DateV2Value<T>::from_date_format_str(const char* format, int format_len, co while (val < val_end && check_space(*val)) { val++; } - if (val >= val_end) { - break; - } // Check switch if (*ptr == '%' && ptr + 1 < end) { const char* tmp = nullptr; diff --git a/be/test/vec/runtime/vdatetime_value_test.cpp b/be/test/vec/runtime/vdatetime_value_test.cpp index 6c0bfad6b56..24d25f80ba7 100644 --- a/be/test/vec/runtime/vdatetime_value_test.cpp +++ b/be/test/vec/runtime/vdatetime_value_test.cpp @@ -632,4 +632,49 @@ TEST(VDateTimeValueTest, date_v2_daynr_test) { } } +TEST(VDateTimeValueTest, date_v2_from_date_format_str_with_all_space) { + auto test_all_space = [](const std::string& format_str) { + std::string date_str = " "; + { + DateV2Value<DateTimeV2ValueType> date; + EXPECT_FALSE(date.from_date_format_str(format_str.data(), format_str.size(), + date_str.data(), date_str.size())); + } + + { + DateV2Value<DateV2ValueType> date; + EXPECT_FALSE(date.from_date_format_str(format_str.data(), format_str.size(), + date_str.data(), date_str.size())); + } + + { + VecDateTimeValue date; + date._type = TIME_DATE; + EXPECT_FALSE(date.from_date_format_str(format_str.data(), format_str.size(), + date_str.data(), date_str.size())); + } + + { + VecDateTimeValue date; + date._type = TIME_DATETIME; + EXPECT_FALSE(date.from_date_format_str(format_str.data(), format_str.size(), + date_str.data(), date_str.size())); + } + }; + + test_all_space("%Y-%m-%d %H:%i:%s.%f"); + test_all_space("%Y"); + test_all_space("%Y-%m-%d"); + test_all_space("%Y-%m-%d %H:%i:%s"); + test_all_space("%Y-%m-%d %H:%i:%s.%f %p"); + for (char ch = 'a'; ch <= 'z'; ch++) { + std::string fomat_str = "%" + std::string(1, ch); + test_all_space(fomat_str); + } + for (char ch = 'A'; ch <= 'Z'; ch++) { + std::string fomat_str = "%" + std::string(1, ch); + test_all_space(fomat_str); + } +} + } // namespace doris::vectorized diff --git a/regression-test/data/correctness/test_str_to_date.out b/regression-test/data/correctness/test_str_to_date.out index c4326914a7c..9e896c97c7a 100644 Binary files a/regression-test/data/correctness/test_str_to_date.out and b/regression-test/data/correctness/test_str_to_date.out differ diff --git a/regression-test/suites/correctness/test_str_to_date.groovy b/regression-test/suites/correctness/test_str_to_date.groovy index c2fe22f1f72..3335bff7a85 100644 --- a/regression-test/suites/correctness/test_str_to_date.groovy +++ b/regression-test/suites/correctness/test_str_to_date.groovy @@ -52,4 +52,8 @@ suite("test_str_to_date") { qt_short_2 " select STR_TO_DATE('2023-12', '%Y-%m') " qt_short_3 " select STR_TO_DATE('2023-12', '%Y')" qt_short_4 " select STR_TO_DATE('2020%2', '%Y%%%m')" + + qt_select_all_space """ + SELECT STR_TO_DATE(' ', '%Y-%m-%d %H:%i:%s'); + """ } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org