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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]