fix use_sstr_aggr_ state maybe not correct bug

This commit is contained in:
cqliang1995
2024-03-29 04:16:17 +00:00
committed by ob-robot
parent dcf34d56ce
commit 4c26f10dcf
3 changed files with 23 additions and 4 deletions

View File

@ -811,6 +811,10 @@ public:
{
return sizeof(GroupRowBucket);
}
inline bool is_sstr_aggr_valid() const
{
return sstr_aggr_.is_valid();
}
template <typename CB>
int foreach_bucket_hash(CB &cb) const
{

View File

@ -349,6 +349,15 @@ struct GetProbeCntVisitor : public boost::static_visitor<int64_t>
}
};
struct IsSstrAggrValidVisitor : public boost::static_visitor<bool>
{
template <typename T>
bool operator() (T &t) const
{
return t->is_sstr_aggr_valid();
}
};
struct PrefetchVisitor :public boost::static_visitor<>
{
PrefetchVisitor(const ObBatchRows &brs, uint64_t *hash_vals)
@ -552,6 +561,12 @@ public:
return boost::apply_visitor(visitor, hash_table_ptr_);
}
bool is_sstr_aggr_valid() const
{
IsSstrAggrValidVisitor visitor;
return boost::apply_visitor(visitor, hash_table_ptr_);
}
private:
HashAggSetPtr hash_table_ptr_;
void *real_ptr_;

View File

@ -1477,13 +1477,13 @@ int ObHashGroupByVecOp::batch_process_duplicate_data(
int64_t new_group_cnt = 0;
memset(static_cast<void *> (batch_old_rows_), 0, sizeof(char *) * MY_SPEC.max_batch_size_);
memset(static_cast<void *> (batch_new_rows_), 0, sizeof(char *) * MY_SPEC.max_batch_size_);
if (nullptr == store_rows && !use_sstr_aggr_) {
if (nullptr == store_rows && !local_group_rows_.is_sstr_aggr_valid()) {
ret = calc_groupby_exprs_hash_batch(dup_groupby_exprs_, child_brs);
local_group_rows_.prefetch(child_brs, hash_vals_);
}
bool can_append_batch = (NULL == bloom_filter
&& (!enable_dump_
|| use_sstr_aggr_
|| local_group_rows_.is_sstr_aggr_valid()
|| local_group_rows_.size() < MIN_INMEM_GROUPS
|| process_check_dump
|| !need_start_dump(input_rows, est_part_cnt, force_check_dump)));
@ -1721,7 +1721,7 @@ int ObHashGroupByVecOp::group_child_batch_rows(const ObCompactRow **store_rows,
} else if ((ObThreeStageAggrStage::SECOND_STAGE == MY_SPEC.aggr_stage_ && !use_distinct_data_)
&& FALSE_IT(aggr_code_vec = aggr_code_expr->get_vector(eval_ctx_))) {
} else {
if (nullptr == store_rows && !use_sstr_aggr_) {
if (nullptr == store_rows && !local_group_rows_.is_sstr_aggr_valid()) {
ret = calc_groupby_exprs_hash_batch(dup_groupby_exprs_, child_brs);
local_group_rows_.prefetch(child_brs, hash_vals_);
}
@ -1755,7 +1755,7 @@ int ObHashGroupByVecOp::group_child_batch_rows(const ObCompactRow **store_rows,
}
bool can_append_batch = (NULL == bloom_filter
&& (!enable_dump_
|| use_sstr_aggr_
|| local_group_rows_.is_sstr_aggr_valid()
|| local_group_rows_.size() < MIN_INMEM_GROUPS
|| process_check_dump
|| !need_start_dump(input_rows, est_part_cnt, force_check_dump)));