This is an automated email from the ASF dual-hosted git repository. weixiang pushed a commit to branch memtable_opt_rebase_bak in repository https://gitbox.apache.org/repos/asf/doris.git
commit 93c2604c1f7a9a3cdf11e9efabb23c158738a03d Author: weixiang <weixian...@meituan.com> AuthorDate: Fri May 13 00:23:27 2022 +0800 [wx-sr-fix] fix core dump when _block is empty after call to_block --- be/src/olap/memtable.cpp | 4 +--- be/src/vec/core/block.cpp | 18 ++++++++++++++++++ be/src/vec/core/block.h | 2 ++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/be/src/olap/memtable.cpp b/be/src/olap/memtable.cpp index 7f431a7289..2c8f2a6a15 100644 --- a/be/src/olap/memtable.cpp +++ b/be/src/olap/memtable.cpp @@ -225,9 +225,7 @@ void MemTable::_append_sorted_block(vectorized::MutableBlock* src, vectorized::M for (size_t i = 0; i < row_num; i++) { _sorted_index_in_block.push_back(_index_for_sort[i].index_in_block); } - vectorized::Block src_block = src->to_block(); - dst->add_rows(&src_block, _sorted_index_in_block.data(), - _sorted_index_in_block.data() + row_num); + dst->add_rows(src, _sorted_index_in_block.data(), _sorted_index_in_block.data() + row_num); } void MemTable::finalize() { diff --git a/be/src/vec/core/block.cpp b/be/src/vec/core/block.cpp index 8efc0e0e1b..0a23a729b2 100644 --- a/be/src/vec/core/block.cpp +++ b/be/src/vec/core/block.cpp @@ -885,6 +885,24 @@ void MutableBlock::add_rows(const Block* block, size_t row_begin, size_t length) } } +void MutableBlock::add_rows(MutableBlock* block, const int* row_begin, const int* row_end) { + for (size_t i = 0; i < _columns.size(); ++i) { + auto& dst = _columns[i]; + auto& src = *(block->get_column_by_position(i).get()); + dst->insert_indices_from(src, row_begin, row_end); + } +} + +void MutableBlock::add_rows(MutableBlock* block, size_t row_begin, size_t length) { + for (size_t i = 0; i < _columns.size(); ++i) { + auto& dst = _columns[i]; + auto& src = *(block->get_column_by_position(i).get()); + dst->insert_range_from(src, row_begin, length); + } +} + + + Block MutableBlock::to_block(int start_column) { return to_block(start_column, _columns.size()); } diff --git a/be/src/vec/core/block.h b/be/src/vec/core/block.h index 7a6f61deb9..144446e255 100644 --- a/be/src/vec/core/block.h +++ b/be/src/vec/core/block.h @@ -444,6 +444,8 @@ public: void add_row(const Block* block, int row); void add_rows(const Block* block, const int* row_begin, const int* row_end); void add_rows(const Block* block, size_t row_begin, size_t length); + void add_rows(MutableBlock* block, const int* row_begin, const int* row_end); + void add_rows(MutableBlock* block, size_t row_begin, size_t length); std::string dump_data(size_t row_limit = 100) const; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org