This is an automated email from the ASF dual-hosted git repository.

weixiang pushed a commit to branch memtable_opt_rebase
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 0b9d02e87a8dcb8e4196cdae287c2c86ed3bbf6c
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 7bedced5aa..a60b81b735 100644
--- a/be/src/olap/memtable.cpp
+++ b/be/src/olap/memtable.cpp
@@ -233,9 +233,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 0b45ab4af1..fcc0fadbfa 100644
--- a/be/src/vec/core/block.cpp
+++ b/be/src/vec/core/block.cpp
@@ -947,6 +947,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 5c23a939cf..bf33e264bd 100644
--- a/be/src/vec/core/block.h
+++ b/be/src/vec/core/block.h
@@ -451,6 +451,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

Reply via email to