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 bdef6013a8c [chore](type cast) Fix some implicit cast (#43050)
bdef6013a8c is described below

commit bdef6013a8c8b263443ebe6c00d10a9c6c41da8b
Author: zhiqiang <[email protected]>
AuthorDate: Thu Nov 21 20:47:05 2024 +0800

    [chore](type cast) Fix some implicit cast (#43050)
---
 be/src/vec/data_types/convert_field_to_type.cpp    |  5 +-
 be/src/vec/data_types/data_type.cpp                |  4 +-
 be/src/vec/data_types/data_type.h                  | 12 +++--
 be/src/vec/data_types/data_type_bitmap.cpp         |  4 +-
 be/src/vec/data_types/data_type_date.h             |  3 +-
 be/src/vec/data_types/data_type_date_time.h        |  2 +
 be/src/vec/data_types/data_type_decimal.cpp        | 26 ++++++----
 be/src/vec/data_types/data_type_factory.cpp        | 14 +++---
 .../data_types/data_type_fixed_length_object.cpp   |  5 +-
 be/src/vec/data_types/data_type_jsonb.cpp          |  7 ++-
 be/src/vec/data_types/data_type_jsonb.h            |  9 +++-
 be/src/vec/data_types/data_type_nullable.cpp       | 26 +++++++---
 be/src/vec/data_types/data_type_number_base.cpp    | 33 +++++++-----
 be/src/vec/data_types/data_type_number_base.h      |  8 +--
 be/src/vec/data_types/data_type_object.cpp         | 15 +++---
 be/src/vec/data_types/data_type_quantilestate.cpp  |  4 +-
 be/src/vec/data_types/data_type_string.cpp         | 58 ++++++++++++++--------
 be/src/vec/data_types/data_type_time_v2.cpp        |  1 +
 be/src/vec/data_types/data_type_time_v2.h          | 12 +++--
 be/src/vec/runtime/vdatetime_value.cpp             |  9 ++--
 be/src/vec/runtime/vdatetime_value.h               | 24 +++++----
 21 files changed, 178 insertions(+), 103 deletions(-)

diff --git a/be/src/vec/data_types/convert_field_to_type.cpp 
b/be/src/vec/data_types/convert_field_to_type.cpp
index ecbce03ba6b..c625f8c424b 100644
--- a/be/src/vec/data_types/convert_field_to_type.cpp
+++ b/be/src/vec/data_types/convert_field_to_type.cpp
@@ -30,6 +30,7 @@
 #include <type_traits>
 #include <vector>
 
+#include "common/cast_set.h"
 #include "common/exception.h"
 #include "common/status.h"
 #include "util/bitmap_value.h"
@@ -44,6 +45,7 @@
 #include "vec/data_types/data_type_nullable.h"
 
 namespace doris::vectorized {
+#include "common/compile_check_begin.h"
 /** Checking for a `Field from` of `From` type falls to a range of values of 
type `To`.
   * `From` and `To` - numeric types. They can be floating-point types.
   * `From` is one of UInt64, Int64, Float64,
@@ -257,7 +259,8 @@ void convert_field_to_typeImpl(const Field& src, const 
IDataType& type,
         JsonbWriter writer;
         Field::dispatch([&writer](const auto& value) { 
FieldVisitorToJsonb()(value, &writer); },
                         src);
-        *to = JsonbField(writer.getOutput()->getBuffer(), 
writer.getOutput()->getSize());
+        *to = JsonbField(writer.getOutput()->getBuffer(),
+                         cast_set<UInt32, size_t, 
false>(writer.getOutput()->getSize()));
         return;
     } else if (which_type.is_variant_type()) {
         if (src.get_type() == Field::Types::VariantMap) {
diff --git a/be/src/vec/data_types/data_type.cpp 
b/be/src/vec/data_types/data_type.cpp
index cacbf4b2ece..28415076ba3 100644
--- a/be/src/vec/data_types/data_type.cpp
+++ b/be/src/vec/data_types/data_type.cpp
@@ -41,6 +41,7 @@ class ReadBuffer;
 } // namespace doris
 
 namespace doris::vectorized {
+#include "common/compile_check_begin.h"
 
 IDataType::IDataType() = default;
 
@@ -58,7 +59,8 @@ void IDataType::update_avg_value_size_hint(const IColumn& 
column, double& avg_va
     /// Update the average value size hint if amount of read rows isn't too 
small
     size_t row_size = column.size();
     if (row_size > 10) {
-        double current_avg_value_size = 
static_cast<double>(column.byte_size()) / row_size;
+        double current_avg_value_size =
+                static_cast<double>(column.byte_size()) / 
static_cast<double>(row_size);
 
         /// Heuristic is chosen so that avg_value_size_hint increases rapidly 
but decreases slowly.
         if (current_avg_value_size > avg_value_size_hint) {
diff --git a/be/src/vec/data_types/data_type.h 
b/be/src/vec/data_types/data_type.h
index dcabc423bb8..8796e2292a5 100644
--- a/be/src/vec/data_types/data_type.h
+++ b/be/src/vec/data_types/data_type.h
@@ -28,6 +28,7 @@
 #include <boost/core/noncopyable.hpp>
 #include <memory>
 #include <string>
+#include <type_traits>
 #include <vector>
 
 #include "common/exception.h"
@@ -44,7 +45,7 @@ class PColumnMeta;
 enum PGenericType_TypeId : int;
 
 namespace vectorized {
-
+#include "common/compile_check_begin.h"
 class IDataType;
 class IColumn;
 class BufferWritable;
@@ -58,8 +59,11 @@ class Field;
 using DataTypePtr = std::shared_ptr<const IDataType>;
 using DataTypes = std::vector<DataTypePtr>;
 constexpr auto SERIALIZED_MEM_SIZE_LIMIT = 256;
-inline size_t upper_int32(size_t size) {
-    return size_t((3 + size) / 4.0);
+
+template <typename T>
+T upper_int32(T size) {
+    static_assert(std::is_unsigned_v<T>);
+    return T(static_cast<double>(3 + size) / 4.0);
 }
 
 /** Properties of data type.
@@ -421,4 +425,6 @@ char* serialize_const_flag_and_row_num(const IColumn** 
column, char* buf,
 const char* deserialize_const_flag_and_row_num(const char* buf, 
MutableColumnPtr* column,
                                                size_t* real_have_saved_num);
 } // namespace vectorized
+
+#include "common/compile_check_end.h"
 } // namespace doris
diff --git a/be/src/vec/data_types/data_type_bitmap.cpp 
b/be/src/vec/data_types/data_type_bitmap.cpp
index 4ab6b3abc47..3dc585f0b5e 100644
--- a/be/src/vec/data_types/data_type_bitmap.cpp
+++ b/be/src/vec/data_types/data_type_bitmap.cpp
@@ -30,7 +30,7 @@
 #include "vec/io/io_helper.h"
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 // binary: const flag| row num | real saved num | size array | bitmap array
 // <size array>:   bitmap1 size | bitmap2 size | ...
 // <bitmap array>: bitmap1 | bitmap2 | ...
@@ -159,7 +159,7 @@ MutableColumnPtr DataTypeBitMap::create_column() const {
 void DataTypeBitMap::serialize_as_stream(const BitmapValue& cvalue, 
BufferWritable& buf) {
     auto& value = const_cast<BitmapValue&>(cvalue);
     std::string memory_buffer;
-    int bytesize = value.getSizeInBytes();
+    size_t bytesize = value.getSizeInBytes();
     memory_buffer.resize(bytesize);
     value.write_to(const_cast<char*>(memory_buffer.data()));
     write_string_binary(memory_buffer, buf);
diff --git a/be/src/vec/data_types/data_type_date.h 
b/be/src/vec/data_types/data_type_date.h
index 0d62230a9b0..0df23022e2b 100644
--- a/be/src/vec/data_types/data_type_date.h
+++ b/be/src/vec/data_types/data_type_date.h
@@ -35,6 +35,7 @@
 #include "vec/data_types/serde/data_type_date64_serde.h"
 
 namespace doris {
+#include "common/compile_check_begin.h"
 namespace vectorized {
 class BufferWritable;
 class ReadBuffer;
@@ -92,5 +93,5 @@ public:
         return std::make_shared<DataTypeDate64SerDe>(nesting_level);
     }
 };
-
+#include "common/compile_check_end.h"
 } // namespace doris::vectorized
diff --git a/be/src/vec/data_types/data_type_date_time.h 
b/be/src/vec/data_types/data_type_date_time.h
index 99507a37039..03a6a856579 100644
--- a/be/src/vec/data_types/data_type_date_time.h
+++ b/be/src/vec/data_types/data_type_date_time.h
@@ -45,6 +45,7 @@ class DataTypeDateV2;
 } // namespace doris
 
 namespace doris::vectorized {
+#include "common/compile_check_begin.h"
 
 /** DateTime stores time as unix timestamp.
        * The value itself is independent of time zone.
@@ -143,4 +144,5 @@ constexpr bool IsTimeType = IsDateTimeType<DataType> || 
IsDateType<DataType>;
 template <typename DataType>
 constexpr bool IsTimeV2Type = IsDateTimeV2Type<DataType> || 
IsDateV2Type<DataType>;
 
+#include "common/compile_check_end.h"
 } // namespace doris::vectorized
diff --git a/be/src/vec/data_types/data_type_decimal.cpp 
b/be/src/vec/data_types/data_type_decimal.cpp
index 35575106cdb..d08c8268036 100644
--- a/be/src/vec/data_types/data_type_decimal.cpp
+++ b/be/src/vec/data_types/data_type_decimal.cpp
@@ -25,9 +25,12 @@
 #include <streamvbyte.h>
 #include <sys/types.h>
 
+#include <cstddef>
+#include <cstdint>
 #include <cstring>
 
 #include "agent/be_exec_version_manager.h"
+#include "common/cast_set.h"
 #include "runtime/decimalv2_value.h"
 #include "util/string_parser.hpp"
 #include "vec/columns/column.h"
@@ -38,11 +41,12 @@
 #include "vec/common/string_buffer.hpp"
 #include "vec/common/typeid_cast.h"
 #include "vec/core/types.h"
+#include "vec/data_types/data_type.h"
 #include "vec/io/io_helper.h"
 #include "vec/io/reader_buffer.h"
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 template <typename T>
 std::string DataTypeDecimal<T>::do_get_name() const {
     std::stringstream ss;
@@ -124,7 +128,9 @@ void DataTypeDecimal<T>::to_string_batch_impl(const 
ColumnPtr& column_ptr,
             auto str = value.to_string(get_format_scale());
             chars.insert(str.begin(), str.end());
         }
-        offsets[row_num] = chars.size();
+
+        // cast by row, so not use cast_set for performance issue
+        offsets[row_num] = static_cast<UInt32>(chars.size());
     }
 }
 
@@ -157,12 +163,13 @@ int64_t 
DataTypeDecimal<T>::get_uncompressed_serialized_bytes(const IColumn& col
     if (be_exec_version >= USE_CONST_SERDE) {
         auto size = sizeof(bool) + sizeof(size_t) + sizeof(size_t);
         auto real_need_copy_num = is_column_const(column) ? 1 : column.size();
-        auto mem_size = sizeof(T) * real_need_copy_num;
+        auto mem_size = cast_set<UInt32>(sizeof(T) * real_need_copy_num);
         if (mem_size <= SERIALIZED_MEM_SIZE_LIMIT) {
             return size + mem_size;
         } else {
             return size + sizeof(size_t) +
-                   std::max(mem_size, 
streamvbyte_max_compressedbytes(upper_int32(mem_size)));
+                   std::max(cast_set<size_t>(mem_size),
+                            
streamvbyte_max_compressedbytes(upper_int32(mem_size)));
         }
     } else {
         auto size = sizeof(T) * column.size();
@@ -170,7 +177,8 @@ int64_t 
DataTypeDecimal<T>::get_uncompressed_serialized_bytes(const IColumn& col
             return sizeof(uint32_t) + size;
         } else {
             return sizeof(uint32_t) + sizeof(size_t) +
-                   std::max(size, 
streamvbyte_max_compressedbytes(upper_int32(size)));
+                   std::max(size,
+                            
streamvbyte_max_compressedbytes(cast_set<UInt32>(upper_int32(size))));
         }
     }
 }
@@ -183,7 +191,7 @@ char* DataTypeDecimal<T>::serialize(const IColumn& column, 
char* buf, int be_exe
         buf = serialize_const_flag_and_row_num(&data_column, buf, 
&real_need_copy_num);
 
         // mem_size = real_need_copy_num * sizeof(T)
-        const uint32_t mem_size = real_need_copy_num * sizeof(T);
+        UInt32 mem_size = cast_set<UInt32>(real_need_copy_num * sizeof(T));
         const auto* origin_data =
                 assert_cast<const 
ColumnDecimal<T>&>(*data_column).get_data().data();
 
@@ -201,7 +209,7 @@ char* DataTypeDecimal<T>::serialize(const IColumn& column, 
char* buf, int be_exe
         }
     } else {
         // row num
-        const auto mem_size = column.size() * sizeof(T);
+        UInt32 mem_size = cast_set<UInt32>(column.size() * sizeof(T));
         *reinterpret_cast<uint32_t*>(buf) = mem_size;
         buf += sizeof(uint32_t);
         // column data
@@ -230,7 +238,7 @@ const char* DataTypeDecimal<T>::deserialize(const char* 
buf, MutableColumnPtr* c
         buf = deserialize_const_flag_and_row_num(buf, column, 
&real_have_saved_num);
 
         // column data
-        auto mem_size = real_have_saved_num * sizeof(T);
+        UInt32 mem_size = cast_set<UInt32>(real_have_saved_num * sizeof(T));
         auto& container = 
assert_cast<ColumnDecimal<T>*>(origin_column)->get_data();
         container.resize(real_have_saved_num);
         if (mem_size <= SERIALIZED_MEM_SIZE_LIMIT) {
@@ -289,7 +297,7 @@ template <typename T>
 bool DataTypeDecimal<T>::parse_from_string(const std::string& str, T* res) 
const {
     StringParser::ParseResult result = StringParser::PARSE_SUCCESS;
     res->value = 
StringParser::string_to_decimal<DataTypeDecimalSerDe<T>::get_primitive_type()>(
-            str.c_str(), str.size(), precision, scale, &result);
+            str.c_str(), cast_set<Int32>(str.size()), precision, scale, 
&result);
     return result == StringParser::PARSE_SUCCESS || result == 
StringParser::PARSE_UNDERFLOW;
 }
 
diff --git a/be/src/vec/data_types/data_type_factory.cpp 
b/be/src/vec/data_types/data_type_factory.cpp
index 388710b667a..369809d77f6 100644
--- a/be/src/vec/data_types/data_type_factory.cpp
+++ b/be/src/vec/data_types/data_type_factory.cpp
@@ -67,7 +67,7 @@
 #include "vec/data_types/data_type_time_v2.h"
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 DataTypePtr DataTypeFactory::create_data_type(const doris::Field& col_desc) {
     return create_data_type(col_desc.get_desc(), col_desc.is_nullable());
 }
@@ -76,7 +76,7 @@ DataTypePtr DataTypeFactory::create_data_type(const 
TabletColumn& col_desc, bool
     DataTypePtr nested = nullptr;
     if (col_desc.type() == FieldType::OLAP_FIELD_TYPE_AGG_STATE) {
         DataTypes dataTypes;
-        for (size_t i = 0; i < col_desc.get_subtype_count(); i++) {
+        for (UInt32 i = 0; i < col_desc.get_subtype_count(); i++) {
             dataTypes.push_back(create_data_type(col_desc.get_sub_column(i)));
         }
         nested = std::make_shared<vectorized::DataTypeAggState>(
@@ -97,7 +97,7 @@ DataTypePtr DataTypeFactory::create_data_type(const 
TabletColumn& col_desc, bool
         Strings names;
         dataTypes.reserve(col_size);
         names.reserve(col_size);
-        for (size_t i = 0; i < col_size; i++) {
+        for (UInt32 i = 0; i < col_size; i++) {
             dataTypes.push_back(create_data_type(col_desc.get_sub_column(i)));
             names.push_back(col_desc.get_sub_column(i).name());
         }
@@ -546,13 +546,13 @@ DataTypePtr DataTypeFactory::create_data_type(const 
PColumnMeta& pcolumn) {
                                                            
create_data_type(pcolumn.children(1)));
         break;
     case PGenericType::STRUCT: {
-        size_t col_size = pcolumn.children_size();
+        int col_size = pcolumn.children_size();
         DCHECK(col_size >= 1);
         DataTypes dataTypes;
         Strings names;
         dataTypes.reserve(col_size);
         names.reserve(col_size);
-        for (size_t i = 0; i < col_size; i++) {
+        for (int i = 0; i < col_size; i++) {
             dataTypes.push_back(create_data_type(pcolumn.children(i)));
             names.push_back(pcolumn.children(i).name());
         }
@@ -615,10 +615,10 @@ DataTypePtr DataTypeFactory::create_data_type(const 
segment_v2::ColumnMetaPB& pc
                 create_data_type(pcolumn.children_columns(1)));
     } else if (pcolumn.type() == 
static_cast<int>(FieldType::OLAP_FIELD_TYPE_STRUCT)) {
         DCHECK_GE(pcolumn.children_columns().size(), 1);
-        size_t col_size = pcolumn.children_columns().size();
+        Int32 col_size = pcolumn.children_columns().size();
         DataTypes dataTypes(col_size);
         Strings names(col_size);
-        for (size_t i = 0; i < col_size; i++) {
+        for (Int32 i = 0; i < col_size; i++) {
             dataTypes[i] = create_data_type(pcolumn.children_columns(i));
         }
         nested = std::make_shared<DataTypeStruct>(dataTypes, names);
diff --git a/be/src/vec/data_types/data_type_fixed_length_object.cpp 
b/be/src/vec/data_types/data_type_fixed_length_object.cpp
index 11e56892f06..3d8dd001077 100644
--- a/be/src/vec/data_types/data_type_fixed_length_object.cpp
+++ b/be/src/vec/data_types/data_type_fixed_length_object.cpp
@@ -23,10 +23,13 @@
 #include <ostream>
 
 #include "agent/be_exec_version_manager.h"
+#include "common/cast_set.h"
 #include "vec/columns/column.h"
 #include "vec/common/assert_cast.h"
+#include "vec/core/types.h"
 
 namespace doris::vectorized {
+#include "common/compile_check_begin.h"
 
 char* DataTypeFixedLengthObject::serialize(const IColumn& column, char* buf,
                                            int be_exec_version) const {
@@ -62,7 +65,7 @@ char* DataTypeFixedLengthObject::serialize(const IColumn& 
column, char* buf,
         return buf;
     } else {
         // row num
-        const auto row_num = column.size();
+        const UInt32 row_num = cast_set<UInt32>(column.size());
         *reinterpret_cast<uint32_t*>(buf) = row_num;
         buf += sizeof(uint32_t);
         // column data
diff --git a/be/src/vec/data_types/data_type_jsonb.cpp 
b/be/src/vec/data_types/data_type_jsonb.cpp
index 102f6d4889b..49ec95b3b44 100644
--- a/be/src/vec/data_types/data_type_jsonb.cpp
+++ b/be/src/vec/data_types/data_type_jsonb.cpp
@@ -20,11 +20,13 @@
 #include <typeinfo>
 #include <utility>
 
+#include "common/cast_set.h"
 #include "util/jsonb_utils.h"
 #include "vec/columns/column_const.h"
 #include "vec/common/assert_cast.h"
 #include "vec/common/string_buffer.hpp"
 #include "vec/common/string_ref.h"
+#include "vec/core/types.h"
 #include "vec/io/reader_buffer.h"
 
 namespace doris {
@@ -34,7 +36,7 @@ class IColumn;
 } // namespace doris
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 std::string DataTypeJsonb::to_string(const IColumn& column, size_t row_num) 
const {
     auto result = check_column_const_set_readability(column, row_num);
     ColumnPtr ptr = result.first;
@@ -59,7 +61,8 @@ void DataTypeJsonb::to_string(const class 
doris::vectorized::IColumn& column, si
 
 Status DataTypeJsonb::from_string(ReadBuffer& rb, IColumn* column) const {
     JsonBinaryValue value;
-    RETURN_IF_ERROR(value.from_json_string(rb.position(), rb.count()));
+    // Throw exception if rb.count is large than INT32_MAX
+    RETURN_IF_ERROR(value.from_json_string(rb.position(), 
cast_set<Int32>(rb.count())));
 
     auto* column_string = static_cast<ColumnString*>(column);
     column_string->insert_data(value.value(), value.size());
diff --git a/be/src/vec/data_types/data_type_jsonb.h 
b/be/src/vec/data_types/data_type_jsonb.h
index 3d681e3ce79..4aec1ccc041 100644
--- a/be/src/vec/data_types/data_type_jsonb.h
+++ b/be/src/vec/data_types/data_type_jsonb.h
@@ -24,6 +24,7 @@
 #include <memory>
 #include <string>
 
+#include "common/cast_set.h"
 #include "common/status.h"
 #include "runtime/define_primitive_type.h"
 #include "runtime/jsonb_value.h"
@@ -45,6 +46,7 @@ class ReadBuffer;
 } // namespace doris
 
 namespace doris::vectorized {
+#include "common/compile_check_begin.h"
 class DataTypeJsonb final : public IDataType {
 public:
     using ColumnType = ColumnString;
@@ -70,8 +72,9 @@ public:
 
     virtual Field get_default() const override {
         std::string default_json = "null";
-        JsonBinaryValue binary_val(default_json.c_str(), default_json.size());
-        return JsonbField(binary_val.value(), binary_val.size());
+        JsonBinaryValue binary_val(default_json.c_str(), 
static_cast<Int32>(default_json.size()));
+        // Throw exception if default_json.size() is large than INT32_MAX
+        return JsonbField(binary_val.value(), 
cast_set<Int32>(binary_val.size()));
     }
 
     Field get_field(const TExprNode& node) const override {
@@ -100,4 +103,6 @@ public:
 private:
     DataTypeString data_type_string;
 };
+
+#include "common/compile_check_end.h"
 } // namespace doris::vectorized
\ No newline at end of file
diff --git a/be/src/vec/data_types/data_type_nullable.cpp 
b/be/src/vec/data_types/data_type_nullable.cpp
index 66cbcb25a9b..9f155babfaa 100644
--- a/be/src/vec/data_types/data_type_nullable.cpp
+++ b/be/src/vec/data_types/data_type_nullable.cpp
@@ -30,6 +30,7 @@
 #include <utility>
 
 #include "agent/be_exec_version_manager.h"
+#include "common/cast_set.h"
 #include "vec/columns/column.h"
 #include "vec/columns/column_const.h"
 #include "vec/columns/column_nullable.h"
@@ -37,12 +38,13 @@
 #include "vec/common/assert_cast.h"
 #include "vec/common/string_buffer.hpp"
 #include "vec/core/field.h"
+#include "vec/core/types.h"
 #include "vec/data_types/data_type.h"
 #include "vec/data_types/data_type_nothing.h"
 #include "vec/io/reader_buffer.h"
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 DataTypeNullable::DataTypeNullable(const DataTypePtr& nested_data_type_)
         : nested_data_type {nested_data_type_} {
     if (!nested_data_type) {
@@ -114,8 +116,10 @@ int64_t 
DataTypeNullable::get_uncompressed_serialized_bytes(const IColumn& colum
         if (mem_size <= SERIALIZED_MEM_SIZE_LIMIT) {
             size += mem_size;
         } else {
+            // Throw exception if mem_size is large than UINT32_MAX
             size = size + sizeof(size_t) +
-                   std::max(mem_size, 
streamvbyte_max_compressedbytes(upper_int32(mem_size)));
+                   std::max(mem_size, streamvbyte_max_compressedbytes(
+                                              
cast_set<UInt32>(upper_int32(mem_size))));
         }
         const auto& col = assert_cast<const ColumnNullable&>(*data_column);
         size = size + 
nested_data_type->get_uncompressed_serialized_bytes(col.get_nested_column(),
@@ -126,8 +130,10 @@ int64_t 
DataTypeNullable::get_uncompressed_serialized_bytes(const IColumn& colum
         if (size_t size = sizeof(bool) * column.size(); size <= 
SERIALIZED_MEM_SIZE_LIMIT) {
             ret += size + sizeof(uint32_t);
         } else {
+            // Throw exception if mem_size is large than UINT32_MAX
             ret += (sizeof(uint32_t) + sizeof(size_t) +
-                    std::max(size, 
streamvbyte_max_compressedbytes(upper_int32(size))));
+                    std::max(size,
+                             
streamvbyte_max_compressedbytes(cast_set<UInt32>(upper_int32(size)))));
         }
         ret += nested_data_type->get_uncompressed_serialized_bytes(
                 assert_cast<const 
ColumnNullable&>(*column.convert_to_full_column_if_const())
@@ -151,9 +157,10 @@ char* DataTypeNullable::serialize(const IColumn& column, 
char* buf, int be_exec_
             memcpy(buf, col.get_null_map_data().data(), mem_size);
             buf += mem_size;
         } else {
+            // Throw exception if mem_size is large than UINT32_MAX
             auto encode_size = streamvbyte_encode(
                     reinterpret_cast<const 
uint32_t*>(col.get_null_map_data().data()),
-                    upper_int32(mem_size), (uint8_t*)(buf + sizeof(size_t)));
+                    cast_set<UInt32>(upper_int32(mem_size)), (uint8_t*)(buf + 
sizeof(size_t)));
             *reinterpret_cast<size_t*>(buf) = encode_size;
             buf += (sizeof(size_t) + encode_size);
         }
@@ -165,16 +172,17 @@ char* DataTypeNullable::serialize(const IColumn& column, 
char* buf, int be_exec_
 
         // row num
         auto mem_size = col.size() * sizeof(bool);
-        *reinterpret_cast<uint32_t*>(buf) = mem_size;
+        *reinterpret_cast<uint32_t*>(buf) = static_cast<UInt32>(mem_size);
         buf += sizeof(uint32_t);
         // null flags
         if (mem_size <= SERIALIZED_MEM_SIZE_LIMIT) {
             memcpy(buf, col.get_null_map_data().data(), mem_size);
             buf += mem_size;
         } else {
+            // Throw exception if mem_size is large than UINT32_MAX
             auto encode_size = streamvbyte_encode(
                     reinterpret_cast<const 
uint32_t*>(col.get_null_map_data().data()),
-                    upper_int32(mem_size), (uint8_t*)(buf + sizeof(size_t)));
+                    cast_set<UInt32>(upper_int32(mem_size)), (uint8_t*)(buf + 
sizeof(size_t)));
             *reinterpret_cast<size_t*>(buf) = encode_size;
             buf += (sizeof(size_t) + encode_size);
         }
@@ -200,8 +208,9 @@ const char* DataTypeNullable::deserialize(const char* buf, 
MutableColumnPtr* col
         } else {
             size_t encode_size = *reinterpret_cast<const size_t*>(buf);
             buf += sizeof(size_t);
+            // Throw exception if mem_size is large than UINT32_MAX
             streamvbyte_decode((const uint8_t*)buf, 
(uint32_t*)(col->get_null_map_data().data()),
-                               upper_int32(mem_size));
+                               cast_set<UInt32>(upper_int32(mem_size)));
             buf += encode_size;
         }
         // column data values
@@ -221,8 +230,9 @@ const char* DataTypeNullable::deserialize(const char* buf, 
MutableColumnPtr* col
         } else {
             size_t encode_size = *reinterpret_cast<const size_t*>(buf);
             buf += sizeof(size_t);
+            // Throw exception if mem_size is large than UINT32_MAX
             streamvbyte_decode((const uint8_t*)buf, 
(uint32_t*)(col->get_null_map_data().data()),
-                               upper_int32(mem_size));
+                               cast_set<UInt32>(upper_int32(mem_size)));
             buf += encode_size;
         }
         // data values
diff --git a/be/src/vec/data_types/data_type_number_base.cpp 
b/be/src/vec/data_types/data_type_number_base.cpp
index 7d5c831144b..da34d82031c 100644
--- a/be/src/vec/data_types/data_type_number_base.cpp
+++ b/be/src/vec/data_types/data_type_number_base.cpp
@@ -30,6 +30,7 @@
 #include <type_traits>
 
 #include "agent/be_exec_version_manager.h"
+#include "common/cast_set.h"
 #include "gutil/strings/numbers.h"
 #include "runtime/large_int_value.h"
 #include "util/mysql_global.h"
@@ -39,11 +40,12 @@
 #include "vec/columns/column_vector.h"
 #include "vec/common/assert_cast.h"
 #include "vec/common/string_buffer.hpp"
+#include "vec/core/types.h"
 #include "vec/io/io_helper.h"
 #include "vec/io/reader_buffer.h"
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 template <typename T>
 void DataTypeNumberBase<T>::to_string(const IColumn& column, size_t row_num,
                                       BufferWritable& ostr) const {
@@ -197,16 +199,20 @@ int64_t 
DataTypeNumberBase<T>::get_uncompressed_serialized_bytes(const IColumn&
         if (mem_size <= SERIALIZED_MEM_SIZE_LIMIT) {
             return size + mem_size;
         } else {
+            // Throw exception if mem_size is large than UINT32_MAX
             return size + sizeof(size_t) +
-                   std::max(mem_size, 
streamvbyte_max_compressedbytes(upper_int32(mem_size)));
+                   std::max(mem_size, streamvbyte_max_compressedbytes(
+                                              
cast_set<UInt32>(upper_int32(mem_size))));
         }
     } else {
         auto size = sizeof(T) * column.size();
         if (size <= SERIALIZED_MEM_SIZE_LIMIT) {
             return sizeof(uint32_t) + size;
         } else {
+            // Throw exception if mem_size is large than UINT32_MAX
             return sizeof(uint32_t) + sizeof(size_t) +
-                   std::max(size, 
streamvbyte_max_compressedbytes(upper_int32(size)));
+                   std::max(size,
+                            
streamvbyte_max_compressedbytes(cast_set<UInt32>(upper_int32(size))));
         }
     }
 }
@@ -229,9 +235,10 @@ char* DataTypeNumberBase<T>::serialize(const IColumn& 
column, char* buf,
             memcpy(buf, origin_data, mem_size);
             return buf + mem_size;
         } else {
-            auto encode_size =
-                    streamvbyte_encode(reinterpret_cast<const 
uint32_t*>(origin_data),
-                                       upper_int32(mem_size), (uint8_t*)(buf + 
sizeof(size_t)));
+            // Throw exception if mem_size is large than UINT32_MAX
+            auto encode_size = streamvbyte_encode(reinterpret_cast<const 
uint32_t*>(origin_data),
+                                                  
cast_set<UInt32>(upper_int32(mem_size)),
+                                                  (uint8_t*)(buf + 
sizeof(size_t)));
             *reinterpret_cast<size_t*>(buf) = encode_size;
             buf += sizeof(size_t);
             return buf + encode_size;
@@ -239,7 +246,7 @@ char* DataTypeNumberBase<T>::serialize(const IColumn& 
column, char* buf,
     } else {
         // row num
         const auto mem_size = column.size() * sizeof(T);
-        *reinterpret_cast<uint32_t*>(buf) = mem_size;
+        *reinterpret_cast<uint32_t*>(buf) = static_cast<UInt32>(mem_size);
         buf += sizeof(uint32_t);
         // column data
         auto ptr = column.convert_to_full_column_if_const();
@@ -248,10 +255,10 @@ char* DataTypeNumberBase<T>::serialize(const IColumn& 
column, char* buf,
             memcpy(buf, origin_data, mem_size);
             return buf + mem_size;
         }
-
-        auto encode_size =
-                streamvbyte_encode(reinterpret_cast<const 
uint32_t*>(origin_data),
-                                   upper_int32(mem_size), (uint8_t*)(buf + 
sizeof(size_t)));
+        // Throw exception if mem_size is large than UINT32_MAX
+        auto encode_size = streamvbyte_encode(reinterpret_cast<const 
uint32_t*>(origin_data),
+                                              
cast_set<UInt32>(upper_int32(mem_size)),
+                                              (uint8_t*)(buf + 
sizeof(size_t)));
         *reinterpret_cast<size_t*>(buf) = encode_size;
         buf += sizeof(size_t);
         return buf + encode_size;
@@ -277,7 +284,7 @@ const char* DataTypeNumberBase<T>::deserialize(const char* 
buf, MutableColumnPtr
             size_t encode_size = *reinterpret_cast<const size_t*>(buf);
             buf += sizeof(size_t);
             streamvbyte_decode((const uint8_t*)buf, 
(uint32_t*)(container.data()),
-                               upper_int32(mem_size));
+                               cast_set<UInt32>(upper_int32(mem_size)));
             buf = buf + encode_size;
         }
         return buf;
@@ -296,7 +303,7 @@ const char* DataTypeNumberBase<T>::deserialize(const char* 
buf, MutableColumnPtr
         size_t encode_size = *reinterpret_cast<const size_t*>(buf);
         buf += sizeof(size_t);
         streamvbyte_decode((const uint8_t*)buf, (uint32_t*)(container.data()),
-                           upper_int32(mem_size));
+                           cast_set<UInt32>(upper_int32(mem_size)));
         return buf + encode_size;
     }
 }
diff --git a/be/src/vec/data_types/data_type_number_base.h 
b/be/src/vec/data_types/data_type_number_base.h
index 0468ed80c8d..a376b458f51 100644
--- a/be/src/vec/data_types/data_type_number_base.h
+++ b/be/src/vec/data_types/data_type_number_base.h
@@ -30,6 +30,7 @@
 #include <string>
 #include <type_traits>
 
+#include "common/cast_set.h"
 #include "common/status.h"
 #include "runtime/define_primitive_type.h"
 #include "serde/data_type_number_serde.h"
@@ -51,7 +52,7 @@ struct TypeId;
 } // namespace doris
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 /** Implements part of the IDataType interface, common to all numbers and for 
Date and DateTime.
   */
 template <typename T>
@@ -188,12 +189,13 @@ protected:
         for (int row_num = 0; row_num < size; row_num++) {
             auto num = is_const ? col_vec.get_element(0) : 
col_vec.get_element(row_num);
             static_cast<const Derived*>(this)->push_number(chars, num);
-            offsets[row_num] = chars.size();
+            // push_number can check the chars is over uint32 so use 
static_cast here.
+            offsets[row_num] = static_cast<UInt32>(chars.size());
         }
     }
 
 private:
     bool _is_null_literal = false;
 };
-
+#include "common/compile_check_end.h"
 } // namespace doris::vectorized
diff --git a/be/src/vec/data_types/data_type_object.cpp 
b/be/src/vec/data_types/data_type_object.cpp
index 6dde7df44d5..0c795e542b0 100644
--- a/be/src/vec/data_types/data_type_object.cpp
+++ b/be/src/vec/data_types/data_type_object.cpp
@@ -33,6 +33,7 @@
 #include "vec/columns/column_object.h"
 #include "vec/common/assert_cast.h"
 #include "vec/common/typeid_cast.h"
+#include "vec/core/types.h"
 #include "vec/data_types/data_type.h"
 #include "vec/data_types/data_type_factory.hpp"
 #include "vec/json/path_in_data.h"
@@ -44,7 +45,7 @@ class IColumn;
 } // namespace doris
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 DataTypeObject::DataTypeObject(const String& schema_format_, bool is_nullable_)
         : schema_format(to_lower(schema_format_)), is_nullable(is_nullable_) {}
 bool DataTypeObject::equals(const IDataType& rhs) const {
@@ -115,7 +116,8 @@ char* DataTypeObject::serialize(const IColumn& column, 
char* buf, int be_exec_ve
         type->to_pb_column_meta(&column_meta_pb);
         std::string meta_binary;
         column_meta_pb.SerializeToString(&meta_binary);
-        *reinterpret_cast<uint32_t*>(buf) = meta_binary.size();
+        // Safe cast
+        *reinterpret_cast<uint32_t*>(buf) = 
static_cast<UInt32>(meta_binary.size());
         buf += sizeof(uint32_t);
         memcpy(buf, meta_binary.data(), meta_binary.size());
         buf += meta_binary.size();
@@ -124,10 +126,11 @@ char* DataTypeObject::serialize(const IColumn& column, 
char* buf, int be_exec_ve
         buf = type->serialize(entry->data.get_finalized_column(), buf, 
be_exec_version);
     }
     // serialize num of subcolumns
-    *reinterpret_cast<uint32_t*>(size_pos) = num_of_columns;
+    // Safe case
+    *reinterpret_cast<uint32_t*>(size_pos) = 
static_cast<UInt32>(num_of_columns);
     // serialize num of rows, only take effect when subcolumns empty
     if (be_exec_version >= VARIANT_SERDE) {
-        *reinterpret_cast<uint32_t*>(buf) = column_object.rows();
+        *reinterpret_cast<uint32_t*>(buf) = 
static_cast<UInt32>(column_object.rows());
         buf += sizeof(uint32_t);
     }
 
@@ -183,13 +186,13 @@ const char* DataTypeObject::deserialize(const char* buf, 
MutableColumnPtr* colum
 std::string DataTypeObject::to_string(const IColumn& column, size_t row_num) 
const {
     const auto& variant = assert_cast<const ColumnObject&>(column);
     std::string res;
-    static_cast<void>(variant.serialize_one_row_to_string(row_num, &res));
+    
static_cast<void>(variant.serialize_one_row_to_string(cast_set<Int32>(row_num), 
&res));
     return res;
 }
 
 void DataTypeObject::to_string(const IColumn& column, size_t row_num, 
BufferWritable& ostr) const {
     const auto& variant = assert_cast<const ColumnObject&>(column);
-    static_cast<void>(variant.serialize_one_row_to_string(row_num, ostr));
+    
static_cast<void>(variant.serialize_one_row_to_string(cast_set<Int32>(row_num), 
ostr));
 }
 
 } // namespace doris::vectorized
diff --git a/be/src/vec/data_types/data_type_quantilestate.cpp 
b/be/src/vec/data_types/data_type_quantilestate.cpp
index 32cc6069801..567cbd58804 100644
--- a/be/src/vec/data_types/data_type_quantilestate.cpp
+++ b/be/src/vec/data_types/data_type_quantilestate.cpp
@@ -27,6 +27,7 @@
 #include "vec/io/io_helper.h"
 
 namespace doris::vectorized {
+#include "common/compile_check_begin.h"
 // binary: const flag | row num | read saved num | <size array> | 
<quantilestate array>
 // <size array>:  quantilestate1 size | quantilestate2 size | ...
 // <quantilestate array>: quantilestate1 | quantilestate2 | ...
@@ -158,8 +159,7 @@ MutableColumnPtr DataTypeQuantileState::create_column() 
const {
 void DataTypeQuantileState::serialize_as_stream(const QuantileState& cvalue, 
BufferWritable& buf) {
     auto& value = const_cast<QuantileState&>(cvalue);
     std::string memory_buffer;
-    int bytesize = value.get_serialized_size();
-    memory_buffer.resize(bytesize);
+    memory_buffer.resize(value.get_serialized_size());
     
value.serialize(const_cast<uint8_t*>(reinterpret_cast<uint8_t*>(memory_buffer.data())));
     write_string_binary(memory_buffer, buf);
 }
diff --git a/be/src/vec/data_types/data_type_string.cpp 
b/be/src/vec/data_types/data_type_string.cpp
index 424cd43bd3a..c01f2c1f249 100644
--- a/be/src/vec/data_types/data_type_string.cpp
+++ b/be/src/vec/data_types/data_type_string.cpp
@@ -24,9 +24,11 @@
 #include <streamvbyte.h>
 
 #include <cstddef>
+#include <cstdint>
 #include <cstring>
 
 #include "agent/be_exec_version_manager.h"
+#include "common/cast_set.h"
 #include "common/exception.h"
 #include "common/status.h"
 #include "vec/columns/column.h"
@@ -36,10 +38,11 @@
 #include "vec/common/string_buffer.hpp"
 #include "vec/common/string_ref.h"
 #include "vec/core/field.h"
+#include "vec/core/types.h"
 #include "vec/io/reader_buffer.h"
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 std::string DataTypeString::to_string(const IColumn& column, size_t row_num) 
const {
     auto result = check_column_const_set_readability(column, row_num);
     ColumnPtr ptr = result.first;
@@ -97,8 +100,10 @@ int64_t 
DataTypeString::get_uncompressed_serialized_bytes(const IColumn& column,
         if (offsets_size <= SERIALIZED_MEM_SIZE_LIMIT) {
             size += offsets_size;
         } else {
-            size += sizeof(size_t) + std::max(offsets_size, 
streamvbyte_max_compressedbytes(
-                                                                    
upper_int32(offsets_size)));
+            // Throw exception if offsets_size is large than UINT32_MAX
+            size += sizeof(size_t) +
+                    std::max(offsets_size, streamvbyte_max_compressedbytes(
+                                                   
cast_set<UInt32>(upper_int32(offsets_size))));
         }
         size += sizeof(size_t);
         if (size_t bytes = data_column.get_chars().size(); bytes <= 
SERIALIZED_MEM_SIZE_LIMIT) {
@@ -110,7 +115,8 @@ int64_t 
DataTypeString::get_uncompressed_serialized_bytes(const IColumn& column,
                                 "LZ4_MAX_INPUT_SIZE={}",
                                 bytes, LZ4_MAX_INPUT_SIZE);
             }
-            size += sizeof(size_t) + std::max(bytes, 
(size_t)LZ4_compressBound(bytes));
+            size += sizeof(size_t) +
+                    std::max(bytes, 
(size_t)LZ4_compressBound(cast_set<UInt32>(bytes)));
         }
         return size;
     } else {
@@ -121,14 +127,18 @@ int64_t 
DataTypeString::get_uncompressed_serialized_bytes(const IColumn& column,
             offsets_size <= SERIALIZED_MEM_SIZE_LIMIT) {
             size += offsets_size;
         } else {
-            size += sizeof(size_t) + std::max(offsets_size, 
streamvbyte_max_compressedbytes(
-                                                                    
upper_int32(offsets_size)));
+            // Throw exception if offsets_size is large than UINT32_MAX
+            size += sizeof(size_t) +
+                    std::max(offsets_size, streamvbyte_max_compressedbytes(
+                                                   
cast_set<UInt32>(upper_int32(offsets_size))));
         }
 
         if (auto bytes = data_column.get_chars().size(); bytes <= 
SERIALIZED_MEM_SIZE_LIMIT) {
             size += bytes;
         } else {
-            size += sizeof(size_t) + std::max(bytes, 
(size_t)LZ4_compressBound(bytes));
+            // Throw exception if bytes is large than UINT32_MAX
+            size += sizeof(size_t) +
+                    std::max(bytes, 
(size_t)LZ4_compressBound(cast_set<UInt32>(bytes)));
         }
         return size;
     }
@@ -141,16 +151,17 @@ char* DataTypeString::serialize(const IColumn& column, 
char* buf, int be_exec_ve
         buf = serialize_const_flag_and_row_num(&data_column, buf, 
&real_need_copy_num);
 
         // mem_size = real_row_num * sizeof(IColumn::Offset)
-        auto mem_size = real_need_copy_num * sizeof(IColumn::Offset);
+        size_t mem_size = real_need_copy_num * sizeof(IColumn::Offset);
         const auto& string_column = assert_cast<const 
ColumnString&>(*data_column);
         // offsets
         if (mem_size <= SERIALIZED_MEM_SIZE_LIMIT) {
             memcpy(buf, string_column.get_offsets().data(), mem_size);
             buf += mem_size;
         } else {
+            // Throw exception if mem_size is large than UINT32_MAX
             auto encode_size = streamvbyte_encode(
                     reinterpret_cast<const 
uint32_t*>(string_column.get_offsets().data()),
-                    upper_int32(mem_size), (uint8_t*)(buf + sizeof(size_t)));
+                    cast_set<uint32_t>(upper_int32(mem_size)), (uint8_t*)(buf 
+ sizeof(size_t)));
             *reinterpret_cast<size_t*>(buf) = encode_size;
             buf += (sizeof(size_t) + encode_size);
         }
@@ -163,9 +174,9 @@ char* DataTypeString::serialize(const IColumn& column, 
char* buf, int be_exec_ve
             memcpy(buf, string_column.get_chars().data(), value_len);
             buf += value_len;
         } else {
-            auto encode_size =
-                    LZ4_compress_fast(string_column.get_chars().raw_data(), 
(buf + sizeof(size_t)),
-                                      value_len, LZ4_compressBound(value_len), 
1);
+            auto encode_size = 
LZ4_compress_fast(string_column.get_chars().raw_data(),
+                                                 (buf + sizeof(size_t)), 
cast_set<Int32>(value_len),
+                                                 
LZ4_compressBound(cast_set<Int32>(value_len)), 1);
             *reinterpret_cast<size_t*>(buf) = encode_size;
             buf += (sizeof(size_t) + encode_size);
         }
@@ -175,17 +186,18 @@ char* DataTypeString::serialize(const IColumn& column, 
char* buf, int be_exec_ve
         const auto& data_column = assert_cast<const ColumnString&>(*ptr.get());
 
         // row num
-        uint32_t mem_size = data_column.size() * sizeof(IColumn::Offset);
-        *reinterpret_cast<uint32_t*>(buf) = mem_size;
+        size_t mem_size = data_column.size() * sizeof(IColumn::Offset);
+        *reinterpret_cast<uint32_t*>(buf) = static_cast<UInt32>(mem_size);
         buf += sizeof(uint32_t);
         // offsets
         if (mem_size <= SERIALIZED_MEM_SIZE_LIMIT) {
             memcpy(buf, data_column.get_offsets().data(), mem_size);
             buf += mem_size;
         } else {
+            // Throw exception if mem_size is large than UINT32_MAX
             auto encode_size = streamvbyte_encode(
                     reinterpret_cast<const 
uint32_t*>(data_column.get_offsets().data()),
-                    upper_int32(mem_size), (uint8_t*)(buf + sizeof(size_t)));
+                    cast_set<UInt32>(upper_int32(mem_size)), (uint8_t*)(buf + 
sizeof(size_t)));
             *reinterpret_cast<size_t*>(buf) = encode_size;
             buf += (sizeof(size_t) + encode_size);
         }
@@ -199,9 +211,9 @@ char* DataTypeString::serialize(const IColumn& column, 
char* buf, int be_exec_ve
             buf += value_len;
             return buf;
         }
-        auto encode_size =
-                LZ4_compress_fast(data_column.get_chars().raw_data(), (buf + 
sizeof(size_t)),
-                                  value_len, LZ4_compressBound(value_len), 1);
+        auto encode_size = 
LZ4_compress_fast(data_column.get_chars().raw_data(),
+                                             (buf + sizeof(size_t)), 
cast_set<Int32>(value_len),
+                                             
LZ4_compressBound(cast_set<Int32>(value_len)), 1);
         *reinterpret_cast<size_t*>(buf) = encode_size;
         buf += (sizeof(size_t) + encode_size);
         return buf;
@@ -229,7 +241,7 @@ const char* DataTypeString::deserialize(const char* buf, 
MutableColumnPtr* colum
             size_t encode_size = *reinterpret_cast<const size_t*>(buf);
             buf += sizeof(size_t);
             streamvbyte_decode((const uint8_t*)buf, 
(uint32_t*)(offsets.data()),
-                               upper_int32(mem_size));
+                               cast_set<UInt32>(upper_int32(mem_size)));
             buf += encode_size;
         }
 
@@ -245,7 +257,8 @@ const char* DataTypeString::deserialize(const char* buf, 
MutableColumnPtr* colum
         } else {
             size_t encode_size = *reinterpret_cast<const size_t*>(buf);
             buf += sizeof(size_t);
-            LZ4_decompress_safe(buf, reinterpret_cast<char*>(data.data()), 
encode_size, value_len);
+            LZ4_decompress_safe(buf, reinterpret_cast<char*>(data.data()),
+                                cast_set<Int32>(encode_size), 
cast_set<Int32>(value_len));
             buf += encode_size;
         }
         return buf;
@@ -265,7 +278,7 @@ const char* DataTypeString::deserialize(const char* buf, 
MutableColumnPtr* colum
             size_t encode_size = *reinterpret_cast<const size_t*>(buf);
             buf += sizeof(size_t);
             streamvbyte_decode((const uint8_t*)buf, 
(uint32_t*)(offsets.data()),
-                               upper_int32(mem_size));
+                               cast_set<UInt32>(upper_int32(mem_size)));
             buf += encode_size;
         }
         // total length
@@ -280,7 +293,8 @@ const char* DataTypeString::deserialize(const char* buf, 
MutableColumnPtr* colum
         } else {
             size_t encode_size = *reinterpret_cast<const size_t*>(buf);
             buf += sizeof(size_t);
-            LZ4_decompress_safe(buf, reinterpret_cast<char*>(data.data()), 
encode_size, value_len);
+            LZ4_decompress_safe(buf, reinterpret_cast<char*>(data.data()),
+                                cast_set<int32_t>(encode_size), 
cast_set<Int32>(value_len));
             buf += encode_size;
         }
         return buf;
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 53560fac4ba..604518616fa 100644
--- a/be/src/vec/data_types/data_type_time_v2.cpp
+++ b/be/src/vec/data_types/data_type_time_v2.cpp
@@ -37,6 +37,7 @@
 #include "vec/runtime/vdatetime_value.h"
 
 namespace doris {
+#include "common/compile_check_begin.h"
 namespace vectorized {
 class IColumn;
 } // namespace 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 7688a04a9a8..e9f3fd38365 100644
--- a/be/src/vec/data_types/data_type_time_v2.h
+++ b/be/src/vec/data_types/data_type_time_v2.h
@@ -24,6 +24,7 @@
 
 #include <algorithm>
 #include <boost/iterator/iterator_facade.hpp>
+#include <cstdint>
 #include <memory>
 #include <string>
 
@@ -49,7 +50,7 @@ class IColumn;
 } // namespace doris
 
 namespace doris::vectorized {
-
+#include "common/compile_check_begin.h"
 /**
  * Use UInt32 as underlying type to represent DateV2 type.
  * Specifically, a dateV2 type is represented as (YYYY (23 bits), MM (4 bits), 
dd (5 bits)).
@@ -73,7 +74,8 @@ public:
 
     Field get_field(const TExprNode& node) const override {
         DateV2Value<DateV2ValueType> value;
-        if (value.from_date_str(node.date_literal.value.c_str(), 
node.date_literal.value.size())) {
+        if (value.from_date_str(node.date_literal.value.c_str(),
+                                
cast_set<Int32>(node.date_literal.value.size()))) {
             return value.to_date_int_val();
         } else {
             throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT,
@@ -150,8 +152,8 @@ public:
         DateV2Value<DateTimeV2ValueType> value;
         const int32_t scale =
                 node.type.types.empty() ? -1 : 
node.type.types.front().scalar_type.scale;
-        if (value.from_date_str(node.date_literal.value.c_str(), 
node.date_literal.value.size(),
-                                scale)) {
+        if (value.from_date_str(node.date_literal.value.c_str(),
+                                
cast_set<int32_t>(node.date_literal.value.size()), scale)) {
             return value.to_date_int_val();
         } else {
             throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT,
@@ -181,5 +183,5 @@ template <typename DataType>
 constexpr bool IsDataTypeDateTimeV2 = false;
 template <>
 inline constexpr bool IsDataTypeDateTimeV2<DataTypeDateTimeV2> = true;
-
+#include "common/compile_check_end.h"
 } // namespace doris::vectorized
diff --git a/be/src/vec/runtime/vdatetime_value.cpp 
b/be/src/vec/runtime/vdatetime_value.cpp
index 797fee1a50d..f7e72efa089 100644
--- a/be/src/vec/runtime/vdatetime_value.cpp
+++ b/be/src/vec/runtime/vdatetime_value.cpp
@@ -22,6 +22,7 @@
 #include <glog/logging.h>
 
 #include <cctype>
+#include <cstddef>
 #include <cstdlib>
 #include <cstring>
 #include <ctime>
@@ -92,11 +93,11 @@ bool VecDateTimeValue::check_date(uint32_t year, uint32_t 
month, uint32_t day) {
 // The interval format is that with no delimiters
 // YYYY-MM-DD HH-MM-DD.FFFFFF AM in default format
 // 0    1  2  3  4  5  6      7
-bool VecDateTimeValue::from_date_str(const char* date_str, int len) {
+bool VecDateTimeValue::from_date_str(const char* date_str, size_t len) {
     return from_date_str_base(date_str, len, nullptr);
 }
 //parse timezone to get offset
-bool VecDateTimeValue::from_date_str(const char* date_str, int len,
+bool VecDateTimeValue::from_date_str(const char* date_str, size_t len,
                                      const cctz::time_zone& local_time_zone) {
     return from_date_str_base(date_str, len, &local_time_zone);
 }
@@ -3412,7 +3413,7 @@ const char* DateV2Value<T>::day_name() const {
 
 template <typename T>
 void DateV2Value<T>::unchecked_set_time(uint16_t year, uint8_t month, uint8_t 
day, uint8_t hour,
-                                        uint8_t minute, uint8_t second, 
uint32_t microsecond) {
+                                        uint8_t minute, uint16_t second, 
uint32_t microsecond) {
     date_v2_value_.year_ = year;
     date_v2_value_.month_ = month;
     date_v2_value_.day_ = day;
@@ -3425,7 +3426,7 @@ void DateV2Value<T>::unchecked_set_time(uint16_t year, 
uint8_t month, uint8_t da
 }
 
 template <typename T>
-void DateV2Value<T>::unchecked_set_time(uint8_t hour, uint8_t minute, uint8_t 
second,
+void DateV2Value<T>::unchecked_set_time(uint8_t hour, uint8_t minute, uint16_t 
second,
                                         uint32_t microsecond) {
     if constexpr (is_datetime) {
         date_v2_value_.hour_ = hour;
diff --git a/be/src/vec/runtime/vdatetime_value.h 
b/be/src/vec/runtime/vdatetime_value.h
index 9bb89167102..2cf76363478 100644
--- a/be/src/vec/runtime/vdatetime_value.h
+++ b/be/src/vec/runtime/vdatetime_value.h
@@ -32,6 +32,7 @@
 #include <type_traits>
 #include <utility>
 
+#include "gutil/integral_types.h"
 #include "util/hash_util.hpp"
 #include "util/time_lut.h"
 #include "util/timezone_utils.h"
@@ -371,8 +372,8 @@ public:
     // 'YYMMDD', 'YYYYMMDD', 'YYMMDDHHMMSS', 'YYYYMMDDHHMMSS'
     // 'YY-MM-DD', 'YYYY-MM-DD', 'YY-MM-DD HH.MM.SS'
     // 'YYYYMMDDTHHMMSS'
-    bool from_date_str(const char* str, int len);
-    bool from_date_str(const char* str, int len, const cctz::time_zone& 
local_time_zone);
+    bool from_date_str(const char* str, size_t len);
+    bool from_date_str(const char* str, size_t len, const cctz::time_zone& 
local_time_zone);
 
     // Construct Date/Datetime type value from int64_t value.
     // Return true if convert success. Otherwise return false.
@@ -428,15 +429,16 @@ public:
 
     int64_t daynr() const { return calc_daynr(_year, _month, _day); }
 
-    int year() const { return _year; }
-    int month() const { return _month; }
+    uint16_t year() const { return _year; }
+    uint8_t month() const { return _month; }
     int quarter() const { return (_month - 1) / 3 + 1; }
     int week() const { return week(mysql_week_mode(0)); } //00-53
-    int day() const { return _day; }
-    int hour() const { return _hour; }
-    int minute() const { return _minute; }
-    int second() const { return _second; }
-    int neg() const { return _neg; }
+    uint8_t day() const { return _day; }
+    uint8_t hour() const { return _hour; }
+    uint8_t minute() const { return _minute; }
+    uint16_t second() const { return _second; }
+    uint16_t neg() const { return _neg; }
+
     int64_t time_part_to_seconds() const {
         return _hour * SECOND_PER_HOUR + _minute * SECOND_PER_MINUTE + _second;
     }
@@ -888,9 +890,9 @@ public:
     }
 
     void unchecked_set_time(uint16_t year, uint8_t month, uint8_t day, uint8_t 
hour, uint8_t minute,
-                            uint8_t second, uint32_t microsecond = 0);
+                            uint16_t second, uint32_t microsecond = 0);
 
-    void unchecked_set_time(uint8_t hour, uint8_t minute, uint8_t second, 
uint32_t microsecond);
+    void unchecked_set_time(uint8_t hour, uint8_t minute, uint16_t second, 
uint32_t microsecond);
 
     int64_t daynr() const {
         return calc_daynr(date_v2_value_.year_, date_v2_value_.month_, 
date_v2_value_.day_);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to