[refactor](mem_reuse) refactor mem_reuse in MutableBlock (#21564)
This commit is contained in:
@ -38,11 +38,13 @@
|
||||
#include "vec/columns/column_nullable.h"
|
||||
#include "vec/columns/column_vector.h"
|
||||
#include "vec/common/assert_cast.h"
|
||||
#include "vec/core/block.h"
|
||||
#include "vec/core/column_with_type_and_name.h"
|
||||
#include "vec/core/types.h"
|
||||
#include "vec/data_types/data_type.h"
|
||||
#include "vec/exprs/vexpr.h"
|
||||
#include "vec/exprs/vexpr_context.h"
|
||||
#include "vec/utils/util.hpp"
|
||||
|
||||
namespace doris::vectorized {
|
||||
VRepeatNode::VRepeatNode(ObjectPool* pool, const TPlanNode& tnode, const DescriptorTbl& descs)
|
||||
@ -102,17 +104,10 @@ Status VRepeatNode::get_repeated_block(Block* child_block, int repeat_id_idx, Bl
|
||||
|
||||
size_t child_column_size = child_block->columns();
|
||||
size_t column_size = _output_slots.size();
|
||||
bool mem_reuse = output_block->mem_reuse();
|
||||
DCHECK_LT(child_column_size, column_size);
|
||||
std::vector<vectorized::MutableColumnPtr> columns(column_size);
|
||||
for (size_t i = 0; i < column_size; i++) {
|
||||
if (mem_reuse) {
|
||||
columns[i] = std::move(*output_block->get_by_position(i).column).mutate();
|
||||
} else {
|
||||
columns[i] = _output_slots[i]->get_empty_mutable_column();
|
||||
}
|
||||
}
|
||||
|
||||
MutableBlock m_block =
|
||||
VectorizedUtils::build_mutable_mem_reuse_block(output_block, _output_slots);
|
||||
MutableColumns& columns = m_block.mutable_columns();
|
||||
/* Fill all slots according to child, for example:select tc1,tc2,sum(tc3) from t1 group by grouping sets((tc1),(tc2));
|
||||
* insert into t1 values(1,2,1),(1,3,1),(2,1,1),(3,1,1);
|
||||
* slot_id_set_list=[[0],[1]],repeat_id_idx=0,
|
||||
@ -173,18 +168,6 @@ Status VRepeatNode::get_repeated_block(Block* child_block, int repeat_id_idx, Bl
|
||||
|
||||
DCHECK_EQ(cur_col, column_size);
|
||||
|
||||
if (!columns.empty() && !columns[0]->empty()) {
|
||||
auto n_columns = 0;
|
||||
if (!mem_reuse) {
|
||||
for (const auto slot_desc : _output_slots) {
|
||||
output_block->insert(ColumnWithTypeAndName(std::move(columns[n_columns++]),
|
||||
slot_desc->get_data_type_ptr(),
|
||||
slot_desc->col_name()));
|
||||
}
|
||||
} else {
|
||||
columns.clear();
|
||||
}
|
||||
}
|
||||
return Status::OK();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user