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 <zchw...@qq.com> AuthorDate: Wed Jan 26 16:33:37 2022 +0800 handle conflict (#7836) Co-authored-by: zuochunwei <zuochun...@meituan.com> --- 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: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org