This is an automated email from the ASF dual-hosted git repository. lide pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.2-lts by this push: new 11dbdceee92 [fix](function) the result of timestampdiff() is wrong (#26154) 11dbdceee92 is described below commit 11dbdceee92d99939ad1812173428f57e3d2851c Author: lw112 <131352377+felixw...@users.noreply.github.com> AuthorDate: Fri Nov 3 10:42:16 2023 +0800 [fix](function) the result of timestampdiff() is wrong (#26154) --- be/src/vec/runtime/vdatetime_value.h | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/be/src/vec/runtime/vdatetime_value.h b/be/src/vec/runtime/vdatetime_value.h index 0db31dae209..0080533d3c9 100644 --- a/be/src/vec/runtime/vdatetime_value.h +++ b/be/src/vec/runtime/vdatetime_value.h @@ -184,6 +184,7 @@ static constexpr uint32_t MIN_YEAR = 0; static constexpr uint32_t DATEV2_YEAR_WIDTH = 23; static constexpr uint32_t DATETIMEV2_YEAR_WIDTH = 18; +static constexpr uint32_t DATETIMEV2_MONTH_WIDTH = 4; static RE2 time_zone_offset_format_reg("^[+-]{1}\\d{2}\\:\\d{2}$"); @@ -1316,8 +1317,8 @@ int64_t datetime_diff(const DateV2Value<T0>& ts_value1, const DateV2Value<T1>& t int month = (ts_value2.year() - ts_value1.year()) * 12 + (ts_value2.month() - ts_value1.month()); if constexpr (std::is_same_v<T0, T1>) { - int shift_bits = DateV2Value<T0>::is_datetime ? DATETIMEV2_YEAR_WIDTH + 5 - : DATEV2_YEAR_WIDTH + 5; + int shift_bits = DateV2Value<T0>::is_datetime ? DATETIMEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH + : DATEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH; decltype(ts_value2.to_date_int_val()) minus_one = -1; if (month > 0) { month -= ((ts_value2.to_date_int_val() & (minus_one >> shift_bits)) < @@ -1330,23 +1331,23 @@ int64_t datetime_diff(const DateV2Value<T0>& ts_value1, const DateV2Value<T1>& t auto ts1_int_value = ((uint64_t)ts_value1.to_date_int_val()) << TIME_PART_LENGTH; if (month > 0) { month -= ((ts_value2.to_date_int_val() & - (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + 5))) < - (ts1_int_value & (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + 5)))); + (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH))) < + (ts1_int_value & (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH)))); } else if (month < 0) { month += ((ts_value2.to_date_int_val() & - (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + 5))) > - (ts1_int_value & (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + 5)))); + (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH))) > + (ts1_int_value & (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH)))); } } else { auto ts2_int_value = ((uint64_t)ts_value2.to_date_int_val()) << TIME_PART_LENGTH; if (month > 0) { - month -= ((ts2_int_value & (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + 5))) < + month -= ((ts2_int_value & (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH))) < (ts_value1.to_date_int_val() & - (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + 5)))); + (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH)))); } else if (month < 0) { - month += ((ts2_int_value & (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + 5))) > + month += ((ts2_int_value & (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH))) > (ts_value1.to_date_int_val() & - (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + 5)))); + (uint64_minus_one >> (DATETIMEV2_YEAR_WIDTH + DATETIMEV2_MONTH_WIDTH)))); } } return month; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org