This is an automated email from the ASF dual-hosted git repository. yiguolei 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 34c946bb99 [Bug](date) fix regression test test_date_function (#18564) 34c946bb99 is described below commit 34c946bb99c4d673f9b582f0a38eea50126eb4bb Author: Gabriel <gabrielleeb...@gmail.com> AuthorDate: Wed Apr 12 14:16:30 2023 +0800 [Bug](date) fix regression test test_date_function (#18564) --- be/src/vec/runtime/vdatetime_value.cpp | 17 +++++++++++------ be/src/vec/runtime/vdatetime_value.h | 2 +- regression-test/pipeline/p0/conf/regression-conf.groovy | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/be/src/vec/runtime/vdatetime_value.cpp b/be/src/vec/runtime/vdatetime_value.cpp index 16ee2b5664..148c67f95a 100644 --- a/be/src/vec/runtime/vdatetime_value.cpp +++ b/be/src/vec/runtime/vdatetime_value.cpp @@ -1795,28 +1795,31 @@ bool DateV2Value<T>::is_invalid(uint32_t year, uint32_t month, uint32_t day, uin } template <typename T> -void DateV2Value<T>::format_datetime(uint32_t* date_val) const { +void DateV2Value<T>::format_datetime(uint32_t* date_val, bool* carry_bits) const { // ms DCHECK(date_val[6] < 1000000L); // hour, minute, second for (size_t i = 5; i > 2; i--) { - if (date_val[i] == MAX_TIME_PART_VALUE[i - 3] + 1) { + if (date_val[i] == MAX_TIME_PART_VALUE[i - 3] + 1 && carry_bits[i + 1]) { date_val[i] = 0; date_val[i - 1] += 1; + carry_bits[i] = true; } } // day if (date_val[1] == 2 && doris::is_leap(date_val[0])) { - if (date_val[2] == 30) { + if (date_val[2] == 30 && carry_bits[3]) { date_val[2] = 1; date_val[1] += 1; + carry_bits[2] = true; } - } else if (date_val[2] == s_days_in_month[date_val[1]] + 1) { + } else if (date_val[2] == s_days_in_month[date_val[1]] + 1 && carry_bits[3]) { date_val[2] = 1; date_val[1] += 1; + carry_bits[2] = true; } // month - if (date_val[1] == 13) { + if (date_val[1] == 13 && carry_bits[2]) { date_val[1] = 1; date_val[0] += 1; } @@ -1833,6 +1836,7 @@ bool DateV2Value<T>::from_date_str(const char* date_str, int len, int scale) { const static int allow_space_mask = 4 | 64; uint32_t date_val[MAX_DATE_PARTS] = {0}; int32_t date_len[MAX_DATE_PARTS] = {0}; + bool carry_bits[MAX_DATE_PARTS] = {false}; // Skip space character while (ptr < end && isspace(*ptr)) { @@ -1891,6 +1895,7 @@ bool DateV2Value<T>::from_date_str(const char* date_str, int len, int scale) { if (temp_val == 1000000L) { temp_val = 0; date_val[field_idx - 1] += 1; + carry_bits[field_idx] = true; } } } @@ -1955,7 +1960,7 @@ bool DateV2Value<T>::from_date_str(const char* date_str, int len, int scale) { } if (num_field < 3) return false; - format_datetime(date_val); + format_datetime(date_val, carry_bits); return check_range_and_set_time(date_val[0], date_val[1], date_val[2], date_val[3], date_val[4], date_val[5], date_val[6]); } diff --git a/be/src/vec/runtime/vdatetime_value.h b/be/src/vec/runtime/vdatetime_value.h index 622a4d9350..09c1d4dbe6 100644 --- a/be/src/vec/runtime/vdatetime_value.h +++ b/be/src/vec/runtime/vdatetime_value.h @@ -1122,7 +1122,7 @@ public: static constexpr int MAX_DATE_PARTS = 7; static constexpr uint32_t MAX_TIME_PART_VALUE[3] = {23, 59, 59}; - void format_datetime(uint32_t* date_val) const; + void format_datetime(uint32_t* date_v, bool* carry_bits) const; private: static uint8_t calc_week(const uint32_t& day_nr, const uint16_t& year, const uint8_t& month, diff --git a/regression-test/pipeline/p0/conf/regression-conf.groovy b/regression-test/pipeline/p0/conf/regression-conf.groovy index 5f3112f86e..2beff2390b 100644 --- a/regression-test/pipeline/p0/conf/regression-conf.groovy +++ b/regression-test/pipeline/p0/conf/regression-conf.groovy @@ -48,7 +48,7 @@ testDirectories = "" // this groups will not be executed excludeGroups = "" // this suites will not be executed -excludeSuites = "test_date_function,test_broker_load" +excludeSuites = "test_broker_load" // this directories will not be executed excludeDirectories = "" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org