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

Reply via email to