This is an automated email from the ASF dual-hosted git repository. kxiao 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 d618d9d9011 [branch-2.0](function) fix wrong result when convert_tz is out of bound (#37358) (#38312) d618d9d9011 is described below commit d618d9d9011bee29831267c32e75f3c3487b6968 Author: zclllhhjj <zhaochan...@selectdb.com> AuthorDate: Wed Jul 31 21:47:58 2024 +0800 [branch-2.0](function) fix wrong result when convert_tz is out of bound (#37358) (#38312) --- be/src/vec/functions/function_cast.h | 1 + be/src/vec/functions/function_convert_tz.h | 14 +++++++------- .../datetime_functions/test_date_function.out | 6 ++++++ .../datetime_functions/test_date_function.groovy | 2 ++ 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/be/src/vec/functions/function_cast.h b/be/src/vec/functions/function_cast.h index 3055e1f99f7..8bcc531231b 100644 --- a/be/src/vec/functions/function_cast.h +++ b/be/src/vec/functions/function_cast.h @@ -87,6 +87,7 @@ #include "vec/functions/function.h" #include "vec/functions/function_convert_tz.h" #include "vec/functions/function_helpers.h" +#include "vec/io/io_helper.h" #include "vec/io/reader_buffer.h" #include "vec/runtime/vdatetime_value.h" diff --git a/be/src/vec/functions/function_convert_tz.h b/be/src/vec/functions/function_convert_tz.h index 378788b538f..ec7a7a7ff6a 100644 --- a/be/src/vec/functions/function_convert_tz.h +++ b/be/src/vec/functions/function_convert_tz.h @@ -18,19 +18,15 @@ #pragma once #include <cctz/time_zone.h> -#include <stddef.h> -#include <stdint.h> +#include <cstddef> #include <cstdint> -#include <map> #include <memory> #include <string> #include <type_traits> #include <utility> #include "common/status.h" -#include "runtime/exec_env.h" -#include "runtime/runtime_state.h" #include "udf/udf.h" #include "util/binary_cast.hpp" #include "util/timezone_utils.h" @@ -53,7 +49,6 @@ #include "vec/data_types/data_type_string.h" #include "vec/data_types/data_type_time_v2.h" #include "vec/functions/function.h" -#include "vec/io/io_helper.h" #include "vec/runtime/vdatetime_value.h" namespace doris::vectorized { @@ -117,7 +112,6 @@ struct ConvertTZImpl { result_column->insert_default(); return; } - if (!TimezoneUtils::find_cctz_time_zone(to_tz_name, to_tz)) { result_null_map[index_now] = true; result_column->insert_default(); @@ -143,6 +137,12 @@ struct ConvertTZImpl { ts_value2.from_unixtime(timestamp, to_tz); } + if (!ts_value2.is_valid_date()) [[unlikely]] { + result_null_map[index_now] = true; + result_column->insert_default(); + return; + } + result_column->insert(binary_cast<ReturnDateType, ReturnNativeType>(ts_value2)); } 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 46931a3dd97..58977b9eceb 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 @@ -38,6 +38,12 @@ -- !sql -- \N +-- !lower_bound -- +\N + +-- !lower_bound -- +0000-01-01T00:00 + -- !sql_convert_tz_null -- \N \N 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 2714926b3af..6140c76150f 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 @@ -54,6 +54,8 @@ suite("test_date_function") { qt_sql """ SELECT convert_tz('2022-2-29 13:21:03', '+08:00', 'America/London') result; """ qt_sql """ SELECT convert_tz('2022-02-29 13:21:03', '+08:00', 'America/London') result; """ qt_sql """ SELECT convert_tz('1900-00-00 13:21:03', '+08:00', 'America/London') result; """ + qt_lower_bound """ select convert_tz('0000-01-01 00:00:00', '+08:00', '-02:00'); """ + qt_lower_bound """ select convert_tz('0000-01-01 00:00:00', '+08:00', '+08:00'); """ // bug fix sql """ insert into ${tableName} values --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org