This is an automated email from the ASF dual-hosted git repository.
wangbo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new ec5ecd1 handle conflict (#7836)
ec5ecd1 is described below
commit ec5ecd1604c3336cd6d00d28ecc8836f6fda029e
Author: zuochunwei <[email protected]>
AuthorDate: Wed Jan 26 16:33:37 2022 +0800
handle conflict (#7836)
Co-authored-by: zuochunwei <[email protected]>
---
be/src/olap/rowset/segment_v2/binary_dict_page.cpp | 7 +-----
be/src/olap/rowset/segment_v2/bitshuffle_page.h | 9 ++-----
be/src/vec/columns/column.h | 4 +++
be/src/vec/columns/column_nullable.h | 5 ++++
be/src/vec/columns/column_vector.h | 29 ++++++++++++++++++++++
5 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/be/src/olap/rowset/segment_v2/binary_dict_page.cpp
b/be/src/olap/rowset/segment_v2/binary_dict_page.cpp
index 47e26b3..f986fce 100644
--- a/be/src/olap/rowset/segment_v2/binary_dict_page.cpp
+++ b/be/src/olap/rowset/segment_v2/binary_dict_page.cpp
@@ -263,12 +263,7 @@ Status BinaryDictPageDecoder::next_batch(size_t* n,
vectorized::MutableColumnPtr
if (dst->is_nullable()) {
auto nullable_column =
assert_cast<vectorized::ColumnNullable*>(dst.get());
dst_col_ptr = nullable_column->get_nested_column_ptr().get();
-
- // fill null bitmap here, not null;
- // todo(wb) using SIMD speed up here
- for (int i = 0; i < max_fetch; i++) {
- nullable_column->get_null_map_data().push_back(0);
- }
+
nullable_column->get_null_map_column().insert_zeroed_elements(max_fetch);
}
if (dst_col_ptr->is_predicate_column()) {
diff --git a/be/src/olap/rowset/segment_v2/bitshuffle_page.h
b/be/src/olap/rowset/segment_v2/bitshuffle_page.h
index 83eebae..fcaaab1 100644
--- a/be/src/olap/rowset/segment_v2/bitshuffle_page.h
+++ b/be/src/olap/rowset/segment_v2/bitshuffle_page.h
@@ -368,9 +368,7 @@ public:
dst_col_ptr = nullable_column->get_nested_column_ptr().get();
// fill null bitmap here, not null;
- for (int j = begin; j < end; j++) {
- nullable_column->get_null_map_data().push_back(0);
- }
+ nullable_column->get_null_map_column().insert_zeroed_elements(end
- begin);
}
// todo(wb) Try to eliminate type judgment in pagedecoder
@@ -403,10 +401,7 @@ public:
dst_col_ptr->insert_data(reinterpret_cast<char*>(&date), 0);
}
} else {
- // todo(wb) batch insert here
- for (; begin < end; begin++) {
- dst_col_ptr->insert_data((const char*)&_chunk.data[begin *
SIZE_OF_TYPE], 0);
- }
+ dst_col_ptr->insert_elements(&_chunk.data[begin * SIZE_OF_TYPE],
(end - begin));
}
*n = max_fetch;
diff --git a/be/src/vec/columns/column.h b/be/src/vec/columns/column.h
index 71b86ae..c730168 100644
--- a/be/src/vec/columns/column.h
+++ b/be/src/vec/columns/column.h
@@ -181,6 +181,10 @@ public:
for (size_t i = 0; i < length; ++i) insert_default();
}
+ virtual void insert_elements(void* elements, size_t num) {
+ LOG(FATAL) << "Method insert_elements is not supported for " <<
get_name();
+ }
+
/** Removes last n elements.
* Is used to support exception-safety of several operations.
* For example, sometimes insertion should be reverted if we catch an
exception during operation processing.
diff --git a/be/src/vec/columns/column_nullable.h
b/be/src/vec/columns/column_nullable.h
index cf5efff..a369c02 100644
--- a/be/src/vec/columns/column_nullable.h
+++ b/be/src/vec/columns/column_nullable.h
@@ -101,6 +101,11 @@ public:
get_null_map_data().resize_fill(get_null_map_data().size() + length,
1);
}
+ void insert_null_elements(int num) {
+ get_nested_column().insert_many_defaults(num);
+ get_null_map_column().insert_elements(1, num);
+ }
+
void pop_back(size_t n) override;
ColumnPtr filter(const Filter& filt, ssize_t result_size_hint) const
override;
ColumnPtr filter_by_selector(const uint16_t* sel, size_t sel_size,
diff --git a/be/src/vec/columns/column_vector.h
b/be/src/vec/columns/column_vector.h
index d909ee5..69d9816 100644
--- a/be/src/vec/columns/column_vector.h
+++ b/be/src/vec/columns/column_vector.h
@@ -208,6 +208,35 @@ public:
void insert_indices_from(const IColumn& src, const int* indices_begin,
const int* indices_end) override;
+ void insert_elements(void* elements, size_t num) {
+ auto old_size = data.size();
+ auto new_size = old_size + num;
+ data.resize(new_size);
+ memcpy(&data[old_size], elements, sizeof(value_type) * num);
+ }
+
+ void insert_elements(const value_type& element, size_t num) {
+ auto old_size = data.size();
+ auto new_size = old_size + num;
+ data.resize(new_size);
+ if constexpr (std::is_same_v<value_type, int8_t>) {
+ memset(&data[old_size], element, sizeof(value_type) * num);
+ } else if constexpr (std::is_same_v<value_type, uint8_t>) {
+ memset(&data[old_size], element, sizeof(value_type) * num);
+ } else {
+ for (size_t i = 0; i < num; ++i) {
+ data[old_size + i] = element;
+ }
+ }
+ }
+
+ void insert_zeroed_elements(size_t num) {
+ auto old_size = data.size();
+ auto new_size = old_size + num;
+ data.resize(new_size);
+ memset(&data[old_size], 0, sizeof(value_type) * num);
+ }
+
ColumnPtr filter(const IColumn::Filter& filt, ssize_t result_size_hint)
const override;
// note(wb) this method is only used in storage layer now
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]