[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 -->
This commit is contained in:
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -25,3 +25,6 @@
|
||||
-- !short_4 --
|
||||
2020-02-01
|
||||
|
||||
-- !select_all_space --
|
||||
\N
|
||||
|
||||
|
||||
@ -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');
|
||||
"""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user