This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.1 by this push:
     new 309152d92fc branch-4.1: [opt](serde)Build Arrow serde error context 
lazily. #64660 (#64712)
309152d92fc is described below

commit 309152d92fcc2a0454f51b0a8e31efbe3680701f
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Jun 23 19:20:42 2026 +0800

    branch-4.1: [opt](serde)Build Arrow serde error context lazily. #64660 
(#64712)
    
    Cherry-picked from #64660
    
    Co-authored-by: daidai <[email protected]>
---
 .../core/data_type_serde/data_type_array_serde.cpp |  6 ++---
 .../data_type_serde/data_type_bitmap_serde.cpp     |  5 ++--
 .../data_type_date_or_datetime_serde.cpp           |  5 ++--
 .../data_type_serde/data_type_datetimev2_serde.cpp |  8 +++---
 .../data_type_serde/data_type_datev2_serde.cpp     |  5 ++--
 .../data_type_serde/data_type_decimal_serde.cpp    | 30 ++++++++--------------
 .../core/data_type_serde/data_type_hll_serde.cpp   |  5 ++--
 .../core/data_type_serde/data_type_ipv4_serde.cpp  |  2 +-
 .../core/data_type_serde/data_type_ipv6_serde.cpp  |  5 ++--
 .../core/data_type_serde/data_type_jsonb_serde.cpp |  5 ++--
 .../core/data_type_serde/data_type_map_serde.cpp   |  9 +++----
 .../data_type_serde/data_type_number_serde.cpp     | 20 +++++++--------
 .../data_type_quantilestate_serde.h                |  5 ++--
 be/src/core/data_type_serde/data_type_serde.h      |  7 ++---
 .../data_type_serde/data_type_string_serde.cpp     |  5 ++--
 .../data_type_serde/data_type_struct_serde.cpp     |  6 ++---
 .../data_type_timestamptz_serde.cpp                |  8 +++---
 .../data_type_serde/data_type_varbinary_serde.cpp  |  5 ++--
 .../data_type_serde/data_type_variant_serde.cpp    |  5 ++--
 19 files changed, 60 insertions(+), 86 deletions(-)

diff --git a/be/src/core/data_type_serde/data_type_array_serde.cpp 
b/be/src/core/data_type_serde/data_type_array_serde.cpp
index c7b139083df..dbabe2053f1 100644
--- a/be/src/core/data_type_serde/data_type_array_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_array_serde.cpp
@@ -305,12 +305,10 @@ Status DataTypeArraySerDe::write_column_to_arrow(const 
IColumn& column, const Nu
     auto* nested_builder = builder.value_builder();
     for (size_t array_idx = start; array_idx < end; ++array_idx) {
         if (null_map && (*null_map)[array_idx]) {
-            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
             continue;
         }
-        RETURN_IF_ERROR(checkArrowStatus(builder.Append(), column.get_name(),
-                                         array_builder->type()->name()));
+        RETURN_IF_ERROR(checkArrowStatus(builder.Append(), column, 
*array_builder));
         RETURN_IF_ERROR(nested_serde->write_column_to_arrow(nested_data, 
nullptr, nested_builder,
                                                             offsets[array_idx 
- 1],
                                                             
offsets[array_idx], ctz));
diff --git a/be/src/core/data_type_serde/data_type_bitmap_serde.cpp 
b/be/src/core/data_type_serde/data_type_bitmap_serde.cpp
index fbd1b470398..b68fcc772e0 100644
--- a/be/src/core/data_type_serde/data_type_bitmap_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_bitmap_serde.cpp
@@ -128,15 +128,14 @@ Status DataTypeBitMapSerDe::write_column_to_arrow(const 
IColumn& column, const N
     auto& builder = assert_cast<arrow::BinaryBuilder&>(*array_builder);
     for (size_t string_i = start; string_i < end; ++string_i) {
         if (null_map && (*null_map)[string_i]) {
-            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
         } else {
             auto& bitmap_value = col.get_element(string_i);
             std::string memory_buffer(bitmap_value.getSizeInBytes(), '0');
             bitmap_value.write_to(memory_buffer.data());
             RETURN_IF_ERROR(checkArrowStatus(
                     builder.Append(memory_buffer.data(), 
static_cast<int>(memory_buffer.size())),
-                    column.get_name(), array_builder->type()->name()));
+                    column, *array_builder));
         }
     }
     return Status::OK();
diff --git a/be/src/core/data_type_serde/data_type_date_or_datetime_serde.cpp 
b/be/src/core/data_type_serde/data_type_date_or_datetime_serde.cpp
index 40561b9d886..c7c9eb19630 100644
--- a/be/src/core/data_type_serde/data_type_date_or_datetime_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_date_or_datetime_serde.cpp
@@ -157,11 +157,10 @@ Status DataTypeDateSerDe<T>::write_column_to_arrow(const 
IColumn& column, const
         const auto* time_val = (const VecDateTimeValue*)(&col_data[i]);
         size_t len = time_val->to_buffer(buf);
         if (null_map && (*null_map)[i]) {
-            RETURN_IF_ERROR(checkArrowStatus(string_builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(string_builder.AppendNull(), 
column, *array_builder));
         } else {
             RETURN_IF_ERROR(checkArrowStatus(string_builder.Append(buf, 
cast_set<int32_t>(len)),
-                                             column.get_name(), 
array_builder->type()->name()));
+                                             column, *array_builder));
         }
     }
     return Status::OK();
diff --git a/be/src/core/data_type_serde/data_type_datetimev2_serde.cpp 
b/be/src/core/data_type_serde/data_type_datetimev2_serde.cpp
index c368ad17662..7a0dfd163c7 100644
--- a/be/src/core/data_type_serde/data_type_datetimev2_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_datetimev2_serde.cpp
@@ -373,8 +373,8 @@ Status DataTypeDateTimeV2SerDe::write_column_to_arrow(const 
IColumn& column,
     const cctz::time_zone& real_ctz = timezone.empty() ? cctz::utc_time_zone() 
: ctz;
     for (size_t i = start; i < end; ++i) {
         if (null_map && (*null_map)[i]) {
-            RETURN_IF_ERROR(checkArrowStatus(timestamp_builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(
+                    checkArrowStatus(timestamp_builder.AppendNull(), column, 
*array_builder));
         } else {
             int64_t timestamp = 0;
             DateV2Value<DateTimeV2ValueType> datetime_val = col_data[i];
@@ -387,8 +387,8 @@ Status DataTypeDateTimeV2SerDe::write_column_to_arrow(const 
IColumn& column,
                 uint32_t millisecond = datetime_val.microsecond() / 1000;
                 timestamp = (timestamp * 1000) + millisecond;
             }
-            
RETURN_IF_ERROR(checkArrowStatus(timestamp_builder.Append(timestamp), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(
+                    checkArrowStatus(timestamp_builder.Append(timestamp), 
column, *array_builder));
         }
     }
     return Status::OK();
diff --git a/be/src/core/data_type_serde/data_type_datev2_serde.cpp 
b/be/src/core/data_type_serde/data_type_datev2_serde.cpp
index 34d69fc1dd1..17c32f04ebe 100644
--- a/be/src/core/data_type_serde/data_type_datev2_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_datev2_serde.cpp
@@ -97,12 +97,11 @@ Status DataTypeDateV2SerDe::write_column_to_arrow(const 
IColumn& column, const N
     for (size_t i = start; i < end; ++i) {
         auto daynr = col_data[i].daynr() - date_threshold;
         if (null_map && (*null_map)[i]) {
-            RETURN_IF_ERROR(checkArrowStatus(date32_builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(date32_builder.AppendNull(), 
column, *array_builder));
         } else {
             RETURN_IF_ERROR(
                     checkArrowStatus(date32_builder.Append(cast_set<int, 
int64_t, false>(daynr)),
-                                     column.get_name(), 
array_builder->type()->name()));
+                                     column, *array_builder));
         }
     }
     return Status::OK();
diff --git a/be/src/core/data_type_serde/data_type_decimal_serde.cpp 
b/be/src/core/data_type_serde/data_type_decimal_serde.cpp
index aace06c0152..9e2864ed854 100644
--- a/be/src/core/data_type_serde/data_type_decimal_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_decimal_serde.cpp
@@ -239,8 +239,7 @@ Status DataTypeDecimalSerDe<T>::write_column_to_arrow(const 
IColumn& column,
                 std::make_shared<arrow::Decimal128Type>(27, 9);
         for (size_t i = start; i < end; ++i) {
             if (null_map && (*null_map)[i]) {
-                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                                 
array_builder->type()->name()));
+                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
                 continue;
             }
             const auto& data_ref = col.get_data_at(i);
@@ -248,8 +247,7 @@ Status DataTypeDecimalSerDe<T>::write_column_to_arrow(const 
IColumn& column,
             int64_t high = (p_value->value) >> 64;
             uint64_t low = cast_set<uint64_t>((p_value->value) & 
0xFFFFFFFFFFFFFFFF);
             arrow::Decimal128 value(high, low);
-            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), column, 
*array_builder));
         }
     } else if constexpr (T == TYPE_DECIMAL128I) {
         auto& builder = 
reinterpret_cast<arrow::Decimal128Builder&>(*array_builder);
@@ -257,8 +255,7 @@ Status DataTypeDecimalSerDe<T>::write_column_to_arrow(const 
IColumn& column,
                 std::make_shared<arrow::Decimal128Type>(38, col.get_scale());
         for (size_t i = start; i < end; ++i) {
             if (null_map && (*null_map)[i]) {
-                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                                 
array_builder->type()->name()));
+                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
                 continue;
             }
             const auto& data_ref = col.get_data_at(i);
@@ -266,8 +263,7 @@ Status DataTypeDecimalSerDe<T>::write_column_to_arrow(const 
IColumn& column,
             int64_t high = (p_value->value) >> 64;
             uint64_t low = cast_set<uint64_t>((p_value->value) & 
0xFFFFFFFFFFFFFFFF);
             arrow::Decimal128 value(high, low);
-            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), column, 
*array_builder));
         }
     } else if constexpr (T == TYPE_DECIMAL32) {
         auto& builder = 
reinterpret_cast<arrow::Decimal128Builder&>(*array_builder);
@@ -275,14 +271,12 @@ Status 
DataTypeDecimalSerDe<T>::write_column_to_arrow(const IColumn& column,
                 std::make_shared<arrow::Decimal128Type>(8, col.get_scale());
         for (size_t i = start; i < end; ++i) {
             if (null_map && (*null_map)[i]) {
-                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                                 
array_builder->type()->name()));
+                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
                 continue;
             }
             Int128 p_value = col.get_element(i).value;
             arrow::Decimal128 value(reinterpret_cast<const 
uint8_t*>(&p_value));
-            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), column, 
*array_builder));
         }
     } else if constexpr (T == TYPE_DECIMAL64) {
         auto& builder = 
reinterpret_cast<arrow::Decimal128Builder&>(*array_builder);
@@ -290,14 +284,12 @@ Status 
DataTypeDecimalSerDe<T>::write_column_to_arrow(const IColumn& column,
                 std::make_shared<arrow::Decimal128Type>(18, col.get_scale());
         for (size_t i = start; i < end; ++i) {
             if (null_map && (*null_map)[i]) {
-                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                                 
array_builder->type()->name()));
+                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
                 continue;
             }
             Int128 p_value = col.get_element(i).value;
             arrow::Decimal128 value(reinterpret_cast<const 
uint8_t*>(&p_value));
-            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), column, 
*array_builder));
         }
     } else if constexpr (T == TYPE_DECIMAL256) {
         auto& builder = 
reinterpret_cast<arrow::Decimal256Builder&>(*array_builder);
@@ -305,8 +297,7 @@ Status DataTypeDecimalSerDe<T>::write_column_to_arrow(const 
IColumn& column,
                 std::make_shared<arrow::Decimal256Type>(76, col.get_scale());
         for (size_t i = start; i < end; ++i) {
             if (null_map && (*null_map)[i]) {
-                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                                 
array_builder->type()->name()));
+                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
                 continue;
             }
             auto p_value = wide::Int256(col.get_element(i));
@@ -318,8 +309,7 @@ Status DataTypeDecimalSerDe<T>::write_column_to_arrow(const 
IColumn& column,
 
             std::array<uint64_t, 4> word_array = {a0, a1, a2, a3};
             arrow::Decimal256 value(arrow::Decimal256::LittleEndianArray, 
word_array);
-            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.Append(value), column, 
*array_builder));
         }
     } else {
         return Status::InvalidArgument("write_column_to_arrow with type " + 
column.get_name());
diff --git a/be/src/core/data_type_serde/data_type_hll_serde.cpp 
b/be/src/core/data_type_serde/data_type_hll_serde.cpp
index a90a5f44d70..568ecee7db4 100644
--- a/be/src/core/data_type_serde/data_type_hll_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_hll_serde.cpp
@@ -132,15 +132,14 @@ Status DataTypeHLLSerDe::write_column_to_arrow(const 
IColumn& column, const Null
     auto& builder = assert_cast<arrow::BinaryBuilder&>(*array_builder);
     for (size_t string_i = start; string_i < end; ++string_i) {
         if (null_map && (*null_map)[string_i]) {
-            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
         } else {
             auto& hll_value = 
const_cast<HyperLogLog&>(col.get_element(string_i));
             std::string memory_buffer(hll_value.max_serialized_size(), '0');
             hll_value.serialize((uint8_t*)memory_buffer.data());
             RETURN_IF_ERROR(checkArrowStatus(
                     builder.Append(memory_buffer.data(), 
static_cast<int>(memory_buffer.size())),
-                    column.get_name(), array_builder->type()->name()));
+                    column, *array_builder));
         }
     }
     return Status::OK();
diff --git a/be/src/core/data_type_serde/data_type_ipv4_serde.cpp 
b/be/src/core/data_type_serde/data_type_ipv4_serde.cpp
index 1b3978f929a..fdb091fe835 100644
--- a/be/src/core/data_type_serde/data_type_ipv4_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_ipv4_serde.cpp
@@ -107,7 +107,7 @@ Status DataTypeIPv4SerDe::write_column_to_arrow(const 
IColumn& column, const Nul
             int32_builder.AppendValues(reinterpret_cast<const 
Int32*>(col_data.data()) + start,
                                        end - start,
                                        reinterpret_cast<const 
uint8_t*>(arrow_null_map_data)),
-            column.get_name(), array_builder->type()->name()));
+            column, *array_builder));
     return Status::OK();
 }
 
diff --git a/be/src/core/data_type_serde/data_type_ipv6_serde.cpp 
b/be/src/core/data_type_serde/data_type_ipv6_serde.cpp
index e860662e404..febf802d0e0 100644
--- a/be/src/core/data_type_serde/data_type_ipv6_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_ipv6_serde.cpp
@@ -128,14 +128,13 @@ Status DataTypeIPv6SerDe::write_column_to_arrow(const 
IColumn& column, const Nul
     auto& string_builder = assert_cast<arrow::StringBuilder&>(*array_builder);
     for (size_t i = start; i < end; ++i) {
         if (null_map && (*null_map)[i]) {
-            RETURN_IF_ERROR(checkArrowStatus(string_builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(string_builder.AppendNull(), 
column, *array_builder));
         } else {
             std::string ipv6_str = IPv6Value::to_string(col_data[i]);
             RETURN_IF_ERROR(checkArrowStatus(
                     string_builder.Append(ipv6_str.c_str(),
                                           cast_set<int, size_t, 
false>(ipv6_str.size())),
-                    column.get_name(), array_builder->type()->name()));
+                    column, *array_builder));
         }
     }
     return Status::OK();
diff --git a/be/src/core/data_type_serde/data_type_jsonb_serde.cpp 
b/be/src/core/data_type_serde/data_type_jsonb_serde.cpp
index 4b0c5b2e2c3..90660dac372 100644
--- a/be/src/core/data_type_serde/data_type_jsonb_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_jsonb_serde.cpp
@@ -104,8 +104,7 @@ Status DataTypeJsonbSerDe::write_column_to_arrow(const 
IColumn& column, const Nu
     auto& builder = assert_cast<arrow::StringBuilder&>(*array_builder);
     for (size_t string_i = start; string_i < end; ++string_i) {
         if (null_map && (*null_map)[string_i]) {
-            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
             continue;
         }
         std::string_view string_ref = 
string_column.get_data_at(string_i).to_string_view();
@@ -114,7 +113,7 @@ Status DataTypeJsonbSerDe::write_column_to_arrow(const 
IColumn& column, const Nu
         RETURN_IF_ERROR(
                 checkArrowStatus(builder.Append(json_string.data(),
                                                 cast_set<int, size_t, 
false>(json_string.size())),
-                                 column.get_name(), 
array_builder->type()->name()));
+                                 column, *array_builder));
     }
     return Status::OK();
 }
diff --git a/be/src/core/data_type_serde/data_type_map_serde.cpp 
b/be/src/core/data_type_serde/data_type_map_serde.cpp
index 44fbde623e7..5f00a887ff0 100644
--- a/be/src/core/data_type_serde/data_type_map_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_map_serde.cpp
@@ -349,8 +349,7 @@ Status DataTypeMapSerDe::write_column_to_arrow(const 
IColumn& column, const Null
 
     for (size_t r = start; r < end; ++r) {
         if ((null_map && (*null_map)[r])) {
-            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
         } else if (simd::contain_one(keys_nullmap_data + offsets[r - 1],
                                      offsets[r] - offsets[r - 1])) {
             // arrow do not support key is null, so we ignore the null 
key-value
@@ -364,8 +363,7 @@ Status DataTypeMapSerDe::write_column_to_arrow(const 
IColumn& column, const Null
                 key_mutable_data->insert_from(nested_keys_column, i);
                 value_mutable_data->insert_from(nested_values_column, i);
             }
-            RETURN_IF_ERROR(checkArrowStatus(builder.Append(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.Append(), column, 
*array_builder));
 
             RETURN_IF_ERROR(key_serde->write_column_to_arrow(
                     *key_mutable_data, nullptr, key_builder, 0, 
key_mutable_data->size(), ctz));
@@ -373,8 +371,7 @@ Status DataTypeMapSerDe::write_column_to_arrow(const 
IColumn& column, const Null
                                                                value_builder, 
0,
                                                                
value_mutable_data->size(), ctz));
         } else {
-            RETURN_IF_ERROR(checkArrowStatus(builder.Append(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.Append(), column, 
*array_builder));
             RETURN_IF_ERROR(key_serde->write_column_to_arrow(
                     nested_keys_column, nullptr, key_builder, offsets[r - 1], 
offsets[r], ctz));
             RETURN_IF_ERROR(value_serde->write_column_to_arrow(
diff --git a/be/src/core/data_type_serde/data_type_number_serde.cpp 
b/be/src/core/data_type_serde/data_type_number_serde.cpp
index 610a24573ce..f82b33769c5 100644
--- a/be/src/core/data_type_serde/data_type_number_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_number_serde.cpp
@@ -101,8 +101,8 @@ Status DataTypeNumberSerDe<T>::write_column_to_arrow(const 
IColumn& column, cons
         auto* null_builder = dynamic_cast<arrow::NullBuilder*>(array_builder);
         if (null_builder) {
             for (size_t i = start; i < end; ++i) {
-                RETURN_IF_ERROR(checkArrowStatus(null_builder->AppendNull(), 
column.get_name(),
-                                                 
null_builder->type()->name()));
+                RETURN_IF_ERROR(
+                        checkArrowStatus(null_builder->AppendNull(), column, 
*null_builder));
             }
         } else {
             auto& builder = assert_cast<ARROW_BUILDER_TYPE&>(*array_builder);
@@ -110,7 +110,7 @@ Status DataTypeNumberSerDe<T>::write_column_to_arrow(const 
IColumn& column, cons
                     builder.AppendValues(reinterpret_cast<const 
uint8_t*>(col_data.data() + start),
                                          end - start,
                                          reinterpret_cast<const 
uint8_t*>(arrow_null_map_data)),
-                    column.get_name(), array_builder->type()->name()));
+                    column, *array_builder));
         }
 
     } else if constexpr (T == TYPE_LARGEINT) {
@@ -119,13 +119,13 @@ Status 
DataTypeNumberSerDe<T>::write_column_to_arrow(const IColumn& column, cons
             auto& data_value = col_data[i];
             std::string value_str = fmt::format("{}", data_value);
             if (null_map && (*null_map)[i]) {
-                RETURN_IF_ERROR(checkArrowStatus(string_builder.AppendNull(), 
column.get_name(),
-                                                 
array_builder->type()->name()));
+                RETURN_IF_ERROR(
+                        checkArrowStatus(string_builder.AppendNull(), column, 
*array_builder));
             } else {
                 RETURN_IF_ERROR(checkArrowStatus(
                         string_builder.Append(value_str.data(),
                                               cast_set<int, size_t, 
false>(value_str.length())),
-                        column.get_name(), array_builder->type()->name()));
+                        column, *array_builder));
             }
         }
     } else if constexpr (T == TYPE_IPV6) {
@@ -134,25 +134,25 @@ Status 
DataTypeNumberSerDe<T>::write_column_to_arrow(const IColumn& column, cons
         RETURN_IF_ERROR(checkArrowStatus(
                 builder.AppendValues((int64_t*)col_data.data() + start, end - 
start,
                                      reinterpret_cast<const 
uint8_t*>(arrow_null_map_data)),
-                column.get_name(), array_builder->type()->name()));
+                column, *array_builder));
     } else if constexpr (T == TYPE_DATEV2) {
         auto& builder = assert_cast<ARROW_BUILDER_TYPE&>(*array_builder);
         RETURN_IF_ERROR(checkArrowStatus(
                 builder.AppendValues((uint32_t*)col_data.data() + start, end - 
start,
                                      reinterpret_cast<const 
uint8_t*>(arrow_null_map_data)),
-                column.get_name(), array_builder->type()->name()));
+                column, *array_builder));
     } else if constexpr (T == TYPE_DATETIMEV2 || T == TYPE_TIMESTAMPTZ) {
         auto& builder = assert_cast<ARROW_BUILDER_TYPE&>(*array_builder);
         RETURN_IF_ERROR(checkArrowStatus(
                 builder.AppendValues((uint64_t*)col_data.data() + start, end - 
start,
                                      reinterpret_cast<const 
uint8_t*>(arrow_null_map_data)),
-                column.get_name(), array_builder->type()->name()));
+                column, *array_builder));
     } else {
         auto& builder = assert_cast<ARROW_BUILDER_TYPE&>(*array_builder);
         RETURN_IF_ERROR(checkArrowStatus(
                 builder.AppendValues(col_data.data() + start, end - start,
                                      reinterpret_cast<const 
uint8_t*>(arrow_null_map_data)),
-                column.get_name(), array_builder->type()->name()));
+                column, *array_builder));
     }
     return Status::OK();
 }
diff --git a/be/src/core/data_type_serde/data_type_quantilestate_serde.h 
b/be/src/core/data_type_serde/data_type_quantilestate_serde.h
index 730a7a64a78..bca1b4b4687 100644
--- a/be/src/core/data_type_serde/data_type_quantilestate_serde.h
+++ b/be/src/core/data_type_serde/data_type_quantilestate_serde.h
@@ -105,8 +105,7 @@ public:
         auto& builder = assert_cast<arrow::BinaryBuilder&>(*array_builder);
         for (size_t string_i = start; string_i < end; ++string_i) {
             if (null_map && (*null_map)[string_i]) {
-                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                                 
array_builder->type()->name()));
+                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
*array_builder));
             } else {
                 auto& quantile_state_value = 
const_cast<QuantileState&>(col.get_element(string_i));
                 std::string 
memory_buffer(quantile_state_value.get_serialized_size(), '0');
@@ -114,7 +113,7 @@ public:
                 RETURN_IF_ERROR(
                         checkArrowStatus(builder.Append(memory_buffer.data(),
                                                         
static_cast<int>(memory_buffer.size())),
-                                         column.get_name(), 
array_builder->type()->name()));
+                                         column, *array_builder));
             }
         }
         return Status::OK();
diff --git a/be/src/core/data_type_serde/data_type_serde.h 
b/be/src/core/data_type_serde/data_type_serde.h
index b9a5cbe76bd..4876f2e0b27 100644
--- a/be/src/core/data_type_serde/data_type_serde.h
+++ b/be/src/core/data_type_serde/data_type_serde.h
@@ -546,11 +546,12 @@ inline static NullMap revert_null_map(const NullMap* 
null_bytemap, size_t start,
     return res;
 }
 
-inline Status checkArrowStatus(const arrow::Status& status, const std::string& 
column,
-                               const std::string& format_name) {
+template <typename ColumnType, typename BuilderType>
+inline Status checkArrowStatus(const arrow::Status& status, const ColumnType& 
column,
+                               const BuilderType& builder) {
     if (!status.ok()) {
         return Status::FatalError("arrow serde with arrow: {} with column : {} 
with error msg: {}",
-                                  format_name, column, status.ToString());
+                                  builder.type()->name(), column.get_name(), 
status.ToString());
     }
     return Status::OK();
 }
diff --git a/be/src/core/data_type_serde/data_type_string_serde.cpp 
b/be/src/core/data_type_serde/data_type_string_serde.cpp
index 7d88fcdf809..e30fbea7c30 100644
--- a/be/src/core/data_type_serde/data_type_string_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_string_serde.cpp
@@ -225,14 +225,13 @@ Status 
DataTypeStringSerDeBase<ColumnType>::write_column_to_arrow_impl(const ICo
     const auto& string_column = assert_cast<const ColumnType&>(column);
     for (size_t string_i = start; string_i < end; ++string_i) {
         if (null_map && (*null_map)[string_i]) {
-            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                             builder.type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
builder));
             continue;
         }
         auto string_ref = string_column.get_data_at(string_i);
         RETURN_IF_ERROR(checkArrowStatus(
                 builder.Append(string_ref.data, cast_set<int, size_t, 
false>(string_ref.size)),
-                column.get_name(), builder.type()->name()));
+                column, builder));
     }
     return Status::OK();
 }
diff --git a/be/src/core/data_type_serde/data_type_struct_serde.cpp 
b/be/src/core/data_type_serde/data_type_struct_serde.cpp
index f64149734f7..ee0643bc6aa 100644
--- a/be/src/core/data_type_serde/data_type_struct_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_struct_serde.cpp
@@ -402,12 +402,10 @@ Status DataTypeStructSerDe::write_column_to_arrow(const 
IColumn& column, const N
     const auto& struct_column = assert_cast<const ColumnStruct&>(column);
     for (auto r = start; r < end; ++r) {
         if (null_map != nullptr && (*null_map)[r]) {
-            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
struct_column.get_name(),
-                                             builder.type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
struct_column, builder));
             continue;
         }
-        RETURN_IF_ERROR(checkArrowStatus(builder.Append(), 
struct_column.get_name(),
-                                         builder.type()->name()));
+        RETURN_IF_ERROR(checkArrowStatus(builder.Append(), struct_column, 
builder));
         for (auto ei = 0; ei < struct_column.tuple_size(); ++ei) {
             auto* elem_builder = builder.field_builder(ei);
             RETURN_IF_ERROR(elem_serdes_ptrs[ei]->write_column_to_arrow(
diff --git a/be/src/core/data_type_serde/data_type_timestamptz_serde.cpp 
b/be/src/core/data_type_serde/data_type_timestamptz_serde.cpp
index c22c65dbd5a..e8c26f6db68 100644
--- a/be/src/core/data_type_serde/data_type_timestamptz_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_timestamptz_serde.cpp
@@ -201,8 +201,8 @@ Status 
DataTypeTimeStampTzSerDe::write_column_to_arrow(const IColumn& column,
     static const auto& UTC = cctz::utc_time_zone();
     for (size_t i = start; i < end; ++i) {
         if (null_map && (*null_map)[i]) {
-            RETURN_IF_ERROR(checkArrowStatus(timestamp_builder.AppendNull(), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(
+                    checkArrowStatus(timestamp_builder.AppendNull(), column, 
*array_builder));
         } else {
             int64_t timestamp = 0;
             const auto& tz = col_data[i];
@@ -215,8 +215,8 @@ Status 
DataTypeTimeStampTzSerDe::write_column_to_arrow(const IColumn& column,
                 uint32_t millisecond = tz.microsecond() / 1000;
                 timestamp = (timestamp * 1000) + millisecond;
             }
-            
RETURN_IF_ERROR(checkArrowStatus(timestamp_builder.Append(timestamp), 
column.get_name(),
-                                             array_builder->type()->name()));
+            RETURN_IF_ERROR(
+                    checkArrowStatus(timestamp_builder.Append(timestamp), 
column, *array_builder));
         }
     }
     return Status::OK();
diff --git a/be/src/core/data_type_serde/data_type_varbinary_serde.cpp 
b/be/src/core/data_type_serde/data_type_varbinary_serde.cpp
index 76ac43d535c..2b1069d3bbb 100644
--- a/be/src/core/data_type_serde/data_type_varbinary_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_varbinary_serde.cpp
@@ -58,13 +58,12 @@ Status DataTypeVarbinarySerDe::write_column_to_arrow(const 
IColumn& column, cons
         const auto& varbinary_column_data = assert_cast<const 
ColumnVarbinary&>(column).get_data();
         for (size_t i = start; i < end; ++i) {
             if (null_map && (*null_map)[i]) {
-                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                                 builder.type()->name()));
+                RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
builder));
                 continue;
             }
             const auto& string_view = varbinary_column_data[i];
             
RETURN_IF_ERROR(checkArrowStatus(builder.Append(string_view.data(), 
string_view.size()),
-                                             column.get_name(), 
builder.type()->name()));
+                                             column, builder));
         }
         return Status::OK();
     };
diff --git a/be/src/core/data_type_serde/data_type_variant_serde.cpp 
b/be/src/core/data_type_serde/data_type_variant_serde.cpp
index efd35971dcb..3bd9be5797f 100644
--- a/be/src/core/data_type_serde/data_type_variant_serde.cpp
+++ b/be/src/core/data_type_serde/data_type_variant_serde.cpp
@@ -49,8 +49,7 @@ Status write_variant_column_to_arrow_impl(const IColumn& 
column, const ColumnVar
     options.timezone = &ctz;
     for (int64_t i = start; i < end; ++i) {
         if (null_map && (*null_map)[cast_set<size_t>(i)]) {
-            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), 
column.get_name(),
-                                             builder.type()->name()));
+            RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(), column, 
builder));
             continue;
         }
 
@@ -59,7 +58,7 @@ Status write_variant_column_to_arrow_impl(const IColumn& 
column, const ColumnVar
         const auto serialized_size =
                 cast_set<typename 
BuilderType::offset_type>(serialized_value.size());
         
RETURN_IF_ERROR(checkArrowStatus(builder.Append(serialized_value.data(), 
serialized_size),
-                                         column.get_name(), 
builder.type()->name()));
+                                         column, builder));
     }
     return Status::OK();
 }


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


Reply via email to