This is an automated email from the ASF dual-hosted git repository.
lihaopeng 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 411f819306a [Opt](join) opt the join copy column from build side
(#29007)
411f819306a is described below
commit 411f819306a15151fd9ebef8d5edaf6177f72184
Author: HappenLee <[email protected]>
AuthorDate: Fri Dec 29 14:39:33 2023 +0800
[Opt](join) opt the join copy column from build side (#29007)
---
be/src/vec/columns/column_decimal.h | 13 +++++++++----
be/src/vec/columns/column_vector.cpp | 14 +++++++++-----
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/be/src/vec/columns/column_decimal.h
b/be/src/vec/columns/column_decimal.h
index 9b1ad69bbad..3681f9190ae 100644
--- a/be/src/vec/columns/column_decimal.h
+++ b/be/src/vec/columns/column_decimal.h
@@ -124,11 +124,16 @@ public:
auto origin_size = size();
auto new_size = indices_end - indices_begin;
data.resize(origin_size + new_size);
- const T* __restrict src_data = reinterpret_cast<const
T*>(src.get_raw_data().data);
- for (uint32_t i = 0; i < new_size; ++i) {
- data[origin_size + i] = src_data[indices_begin[i]];
- }
+ auto copy = [](const T* __restrict src, T* __restrict dest,
+ const uint32_t* __restrict begin, const uint32_t*
__restrict end) {
+ for (auto it = begin; it != end; ++it) {
+ *dest = src[*it];
+ ++dest;
+ }
+ };
+ copy(reinterpret_cast<const T*>(src.get_raw_data().data), data.data()
+ origin_size,
+ indices_begin, indices_end);
}
void insert_many_fix_len_data(const char* data_ptr, size_t num) override;
diff --git a/be/src/vec/columns/column_vector.cpp
b/be/src/vec/columns/column_vector.cpp
index ca8db58fc98..7329f898044 100644
--- a/be/src/vec/columns/column_vector.cpp
+++ b/be/src/vec/columns/column_vector.cpp
@@ -372,11 +372,15 @@ void ColumnVector<T>::insert_indices_from(const IColumn&
src, const uint32_t* in
auto new_size = indices_end - indices_begin;
data.resize(origin_size + new_size);
- const T* __restrict src_data = reinterpret_cast<const
T*>(src.get_raw_data().data);
-
- for (uint32_t i = 0; i < new_size; ++i) {
- data[origin_size + i] = src_data[indices_begin[i]];
- }
+ auto copy = [](const T* __restrict src, T* __restrict dest, const
uint32_t* __restrict begin,
+ const uint32_t* __restrict end) {
+ for (auto it = begin; it != end; ++it) {
+ *dest = src[*it];
+ ++dest;
+ }
+ };
+ copy(reinterpret_cast<const T*>(src.get_raw_data().data), data.data() +
origin_size,
+ indices_begin, indices_end);
}
template <typename T>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]