fix group scan lookup release_op core

This commit is contained in:
obdev
2023-01-10 09:38:05 +00:00
committed by ob-robot
parent 3783a0463c
commit e11e34ee78
2 changed files with 15 additions and 22 deletions

View File

@ -123,7 +123,6 @@ int ObDASGroupScanOp::do_local_index_lookup()
op->set_is_group_scan(true); op->set_is_group_scan(true);
OZ(op->init_group_scan_iter(cur_group_idx_, OZ(op->init_group_scan_iter(cur_group_idx_,
group_size_, group_size_,
op_alloc_,
scan_ctdef_->group_id_expr_)); scan_ctdef_->group_id_expr_));
} }
} }
@ -266,29 +265,20 @@ int ObGroupLookupOp::init_group_range(int64_t cur_group_idx, int64_t group_size)
int ObGroupLookupOp::init_group_scan_iter(int64_t cur_group_idx, int ObGroupLookupOp::init_group_scan_iter(int64_t cur_group_idx,
int64_t group_size, int64_t group_size,
ObIAllocator &allocator,
ObExpr *group_id_expr) ObExpr *group_id_expr)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
void *buf = allocator.alloc(sizeof(ObGroupScanIter));
if (OB_ISNULL(buf)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_WARN("group scan iter buf allocated failed", K(ret));
} else {
ObGroupScanIter *group_iter = new(buf)(ObGroupScanIter);
lookup_iter_ = group_iter;
bool is_vectorized = lookup_rtdef_->p_pd_expr_op_->is_vectorized(); bool is_vectorized = lookup_rtdef_->p_pd_expr_op_->is_vectorized();
int64_t max_row_store_size = is_vectorized ? lookup_rtdef_->eval_ctx_->max_batch_size_: 1; int64_t max_row_store_size = is_vectorized ? lookup_rtdef_->eval_ctx_->max_batch_size_: 1;
group_iter->init_group_range(cur_group_idx, group_size); group_iter_.init_group_range(cur_group_idx, group_size);
OZ(group_iter->init_row_store(lookup_ctdef_->result_output_, OZ(group_iter_.init_row_store(lookup_ctdef_->result_output_,
*lookup_rtdef_->eval_ctx_, *lookup_rtdef_->eval_ctx_,
lookup_rtdef_->stmt_allocator_, lookup_rtdef_->stmt_allocator_,
max_row_store_size, max_row_store_size,
group_id_expr, group_id_expr,
&group_iter->get_result_tmp_iter(), &group_iter_.get_result_tmp_iter(),
lookup_rtdef_->need_check_output_datum_)); lookup_rtdef_->need_check_output_datum_));
}
return ret; return ret;
} }

View File

@ -22,9 +22,12 @@ class ObGroupLookupOp : public ObLocalIndexLookupOp
{ {
public: public:
ObGroupLookupOp() : ObLocalIndexLookupOp(ObNewRowIterator::IterType::ObGroupLookupOp), ObGroupLookupOp() : ObLocalIndexLookupOp(ObNewRowIterator::IterType::ObGroupLookupOp),
group_iter_(),
index_group_cnt_(1), index_group_cnt_(1),
lookup_group_cnt_(1) lookup_group_cnt_(1)
{} {
lookup_iter_ = &group_iter_;
}
virtual ~ObGroupLookupOp(); virtual ~ObGroupLookupOp();
virtual void reset() override virtual void reset() override
{ {
@ -45,10 +48,10 @@ public:
virtual bool need_next_index_batch() const override; virtual bool need_next_index_batch() const override;
virtual int init_group_scan_iter(int64_t cur_group_idx, virtual int init_group_scan_iter(int64_t cur_group_idx,
int64_t group_size, int64_t group_size,
ObIAllocator &allocator,
ObExpr *group_id_expr); ObExpr *group_id_expr);
virtual int switch_lookup_scan_group() override; virtual int switch_lookup_scan_group() override;
public: public:
ObGroupScanIter group_iter_;
int64_t index_group_cnt_; // number of groups fetched from index table int64_t index_group_cnt_; // number of groups fetched from index table
int64_t lookup_group_cnt_; // number of groups fetched from lookup table int64_t lookup_group_cnt_; // number of groups fetched from lookup table
}; };