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