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 80b8db5624d [chore](be) remove set end ptr API since it is very 
dangerous (#53899)
80b8db5624d is described below

commit 80b8db5624d6705c845717882645666e785a24d1
Author: yiguolei <guo...@selectdb.com>
AuthorDate: Sat Jul 26 09:18:28 2025 +0800

    [chore](be) remove set end ptr API since it is very dangerous (#53899)
---
 be/src/vec/columns/column_decimal.cpp  |  2 +-
 be/src/vec/columns/column_dictionary.h |  5 ++---
 be/src/vec/columns/columns_common.cpp  |  4 ++--
 be/src/vec/columns/predicate_column.h  | 13 ++++++++-----
 be/src/vec/common/pod_array.h          |  4 ----
 5 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/be/src/vec/columns/column_decimal.cpp 
b/be/src/vec/columns/column_decimal.cpp
index cd3972780a8..7d02bf9b518 100644
--- a/be/src/vec/columns/column_decimal.cpp
+++ b/be/src/vec/columns/column_decimal.cpp
@@ -400,7 +400,7 @@ size_t ColumnDecimal<T>::filter(const IColumn::Filter& 
filter) {
     }
 
     const auto result_size = result_data - data.data();
-    data.set_end_ptr(result_data);
+    data.resize(result_size);
 
     return result_size;
 }
diff --git a/be/src/vec/columns/column_dictionary.h 
b/be/src/vec/columns/column_dictionary.h
index cf4c6047951..c16a04ccb27 100644
--- a/be/src/vec/columns/column_dictionary.h
+++ b/be/src/vec/columns/column_dictionary.h
@@ -226,11 +226,10 @@ public:
                 _dict.insert_value(value);
             }
         }
-
+        size_t org_size = _codes.size();
         char* end_ptr = (char*)_codes.get_end_ptr();
         memcpy(end_ptr, data_array + start_index, data_num * sizeof(Int32));
-        end_ptr += data_num * sizeof(Int32);
-        _codes.set_end_ptr(end_ptr);
+        _codes.resize(org_size + data_num);
     }
 
     void convert_dict_codes_if_necessary() override {
diff --git a/be/src/vec/columns/columns_common.cpp 
b/be/src/vec/columns/columns_common.cpp
index 6dec3ead039..c47ce476564 100644
--- a/be/src/vec/columns/columns_common.cpp
+++ b/be/src/vec/columns/columns_common.cpp
@@ -228,7 +228,7 @@ size_t 
filter_arrays_impl_generic_without_reserving(PaddedPODArray<T>& elems,
     /// If no need to filter the `offsets`, here do not reset the end ptr of 
`offsets`
     if constexpr (!std::is_same_v<ResultOffsetsBuilder, 
NoResultOffsetsBuilder<OT>>) {
         /// Reset the end ptr to prepare for inserting/pushing elements into 
`offsets` in `ResultOffsetsBuilder`.
-        offsets.set_end_ptr(offsets.data());
+        offsets.resize(0);
     }
 
     ResultOffsetsBuilder result_offsets_builder(&offsets);
@@ -302,7 +302,7 @@ size_t 
filter_arrays_impl_generic_without_reserving(PaddedPODArray<T>& elems,
         const size_t result_data_size = result_data - elems.data();
         CHECK_EQ(result_data_size, offsets.back());
     }
-    elems.set_end_ptr(result_data);
+    elems.resize(result_data - elems.data());
     return result_size;
 }
 } // namespace
diff --git a/be/src/vec/columns/predicate_column.h 
b/be/src/vec/columns/predicate_column.h
index 3f99fc7408b..d4b2d244d7a 100644
--- a/be/src/vec/columns/predicate_column.h
+++ b/be/src/vec/columns/predicate_column.h
@@ -70,6 +70,9 @@ private:
         static_assert(std::is_same_v<ColumnContainer<Y>, ColumnType>);
         auto& res_data = res_ptr->get_data();
         DCHECK(res_data.empty());
+        // Has to reserve first, could not call resize or reserve after 
get_end_ptr
+        // because reserve or resize may change memory block.
+        size_t org_num = res_data.size();
         res_data.reserve(sel_size);
         auto* y = (typename 
PrimitiveTypeTraits<Y>::ColumnItemType*)res_data.get_end_ptr();
         for (size_t i = 0; i < sel_size; i++) {
@@ -82,7 +85,7 @@ private:
                        sizeof(T));
             }
         }
-        res_data.set_end_ptr(y + sel_size);
+        res_data.resize(org_num + sel_size);
     }
 
     void insert_byte_to_res_column(const uint16_t* sel, size_t sel_size, 
IColumn* res_ptr) {
@@ -177,12 +180,12 @@ public:
         constexpr size_t input_type_size = 
sizeof(PrimitiveTypeTraits<TYPE_DATE>::StorageFieldType);
         static_assert(input_type_size == sizeof(uint24_t));
         const auto* input_data_ptr = reinterpret_cast<const 
uint24_t*>(data_ptr);
-
         auto* res_ptr = 
reinterpret_cast<VecDateTimeValue*>(data.get_end_ptr());
+        size_t old_size = data.size();
         for (int i = 0; i < num; i++) {
             
res_ptr[i].set_olap_date(unaligned_load<uint24_t>(&input_data_ptr[i]));
         }
-        data.set_end_ptr(res_ptr + num);
+        data.resize(old_size + num);
     }
 
     void insert_many_datetime(const char* data_ptr, size_t num) {
@@ -190,12 +193,12 @@ public:
                 sizeof(PrimitiveTypeTraits<TYPE_DATETIME>::StorageFieldType);
         static_assert(input_type_size == sizeof(uint64_t));
         const auto* input_data_ptr = reinterpret_cast<const 
uint64_t*>(data_ptr);
-
         auto* res_ptr = 
reinterpret_cast<VecDateTimeValue*>(data.get_end_ptr());
+        size_t old_size = data.size();
         for (int i = 0; i < num; i++) {
             res_ptr[i].from_olap_datetime(input_data_ptr[i]);
         }
-        data.set_end_ptr(res_ptr + num);
+        data.resize(old_size + num);
     }
 
     // The logic is same to ColumnDecimal::insert_many_fix_len_data
diff --git a/be/src/vec/common/pod_array.h b/be/src/vec/common/pod_array.h
index d7e717a8669..f361f1e078b 100644
--- a/be/src/vec/common/pod_array.h
+++ b/be/src/vec/common/pod_array.h
@@ -480,10 +480,6 @@ public:
     const_iterator cend() const { return t_end(); }
 
     void* get_end_ptr() const { return this->c_end; }
-    void set_end_ptr(void* ptr) {
-        this->c_end = (char*)ptr;
-        this->reset_resident_memory();
-    }
 
     /// Same as resize, but zeroes new elements.
     void resize_fill(size_t n) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to