This is an automated email from the ASF dual-hosted git repository. gabriellee 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 bbf88ecc49 [Bug](datetimev2) Fix BE crash if scale is invalid (#17763) bbf88ecc49 is described below commit bbf88ecc4995221a5b60a2cfd44e07d4bbabca8c Author: Gabriel <gabrielleeb...@gmail.com> AuthorDate: Wed Mar 15 12:08:23 2023 +0800 [Bug](datetimev2) Fix BE crash if scale is invalid (#17763) --- be/src/vec/data_types/data_type_factory.cpp | 4 ++-- be/src/vec/data_types/data_type_time_v2.cpp | 9 +++++++++ be/src/vec/data_types/data_type_time_v2.h | 2 ++ .../sql_functions/datetime_functions/test_date_function.groovy | 7 +++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/be/src/vec/data_types/data_type_factory.cpp b/be/src/vec/data_types/data_type_factory.cpp index fa49886eba..1b9b6dbece 100644 --- a/be/src/vec/data_types/data_type_factory.cpp +++ b/be/src/vec/data_types/data_type_factory.cpp @@ -126,7 +126,7 @@ DataTypePtr DataTypeFactory::create_data_type(const TypeDescriptor& col_desc, bo nested = std::make_shared<vectorized::DataTypeDateV2>(); break; case TYPE_DATETIMEV2: - nested = std::make_shared<vectorized::DataTypeDateTimeV2>(col_desc.scale); + nested = vectorized::create_datetimev2(col_desc.scale); break; case TYPE_DATETIME: nested = std::make_shared<vectorized::DataTypeDateTime>(); @@ -243,7 +243,7 @@ DataTypePtr DataTypeFactory::_create_primitive_data_type(const FieldType& type, result = std::make_shared<vectorized::DataTypeDateV2>(); break; case OLAP_FIELD_TYPE_DATETIMEV2: - result = std::make_shared<vectorized::DataTypeDateTimeV2>(scale); + result = vectorized::create_datetimev2(scale); break; case OLAP_FIELD_TYPE_DATETIME: result = std::make_shared<vectorized::DataTypeDateTime>(); diff --git a/be/src/vec/data_types/data_type_time_v2.cpp b/be/src/vec/data_types/data_type_time_v2.cpp index 56dda45bba..293eb2e9ec 100644 --- a/be/src/vec/data_types/data_type_time_v2.cpp +++ b/be/src/vec/data_types/data_type_time_v2.cpp @@ -178,4 +178,13 @@ void DataTypeDateTimeV2::cast_from_date_time(const Int64 from, UInt64& to) { void DataTypeDateTimeV2::cast_to_date_v2(const UInt64 from, UInt32& to) { to = from >> TIME_PART_LENGTH; } + +DataTypePtr create_datetimev2(UInt64 scale_value) { + if (scale_value > 6) { + LOG(WARNING) << "Wrong scale " << scale_value; + return nullptr; + } + return std::make_shared<DataTypeDateTimeV2>(scale_value); +} + } // namespace doris::vectorized diff --git a/be/src/vec/data_types/data_type_time_v2.h b/be/src/vec/data_types/data_type_time_v2.h index 11ecaf91b8..c375db18dd 100644 --- a/be/src/vec/data_types/data_type_time_v2.h +++ b/be/src/vec/data_types/data_type_time_v2.h @@ -91,6 +91,8 @@ private: UInt32 _scale; }; +DataTypePtr create_datetimev2(UInt64 scale); + template <typename DataType> constexpr bool IsDataTypeDateTimeV2 = false; template <> 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 c88de59acc..750a6dffb5 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 @@ -647,6 +647,13 @@ suite("test_date_function") { where birth2 <= date_sub('2023-02-01 10:35:13', INTERVAL dayofmonth('2023-02-01 10:35:13')-1 DAY) """ + test { + sql"""select current_timestamp(7);""" + check{result, exception, startTime, endTime -> + assertTrue(exception != null) + logger.info(exception.message) + } + } sql """ DROP TABLE IF EXISTS ${tableName}; """ } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org