diff --git a/src/sql/engine/aggregate/ob_exec_hash_struct_vec.cpp b/src/sql/engine/aggregate/ob_exec_hash_struct_vec.cpp index 497a030e13..7bc7528e0f 100644 --- a/src/sql/engine/aggregate/ob_exec_hash_struct_vec.cpp +++ b/src/sql/engine/aggregate/ob_exec_hash_struct_vec.cpp @@ -557,9 +557,14 @@ int ObExtendHashTableVec::set_distinct_batch(const RowMeta &row_ { int ret = OB_SUCCESS; new_row_selector_cnt_ = 0; - if (auto_extend_ && OB_UNLIKELY((size_ + batch_size) * SIZE_BUCKET_SCALE >= get_bucket_num())) { + while (OB_SUCC(ret) && auto_extend_ && OB_UNLIKELY((size_ + batch_size) + * SIZE_BUCKET_SCALE >= get_bucket_num())) { + int64_t pre_bkt_num = get_bucket_num(); if (OB_FAIL(extend())) { SQL_ENG_LOG(WARN, "extend failed", K(ret)); + } else if (get_bucket_num() <= pre_bkt_num) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to extend table", K(ret), K(pre_bkt_num), K(get_bucket_num())); } } if (OB_SUCC(ret) && OB_ISNULL(locate_buckets_)) { diff --git a/src/sql/engine/aggregate/ob_exec_hash_struct_vec.h b/src/sql/engine/aggregate/ob_exec_hash_struct_vec.h index c56a16230c..7ce970b3b6 100644 --- a/src/sql/engine/aggregate/ob_exec_hash_struct_vec.h +++ b/src/sql/engine/aggregate/ob_exec_hash_struct_vec.h @@ -1042,7 +1042,7 @@ int ObExtendHashTableVec::get(const RowMeta &row_meta, if (bucket->is_valid()) { RowItemType *it = &(bucket->get_item()); while (OB_SUCC(ret) && nullptr != it) { - if (OB_FAIL(likely_equal(row_meta, static_cast(*it), batch_idx, result))) { + if (OB_FAIL(likely_equal_nullable(row_meta, static_cast(*it), batch_idx, result))) { LOG_WARN("failed to cmp", K(ret)); } else if (result) { item = it; diff --git a/src/sql/engine/basic/ob_hp_infras_vec_op.cpp b/src/sql/engine/basic/ob_hp_infras_vec_op.cpp index fc8bdf2dbf..3ce2d9ccf0 100644 --- a/src/sql/engine/basic/ob_hp_infras_vec_op.cpp +++ b/src/sql/engine/basic/ob_hp_infras_vec_op.cpp @@ -1286,13 +1286,12 @@ int64_t ObHashPartInfrastructureVecImpl::est_bucket_count( const int64_t min_bucket_cnt, const int64_t max_bucket_cnt) { + int64_t est_bucket_cnt = 0; HP_INFRAS_STATUS_CHECK { - if (OB_FAIL(hp_infras_->est_bucket_count(rows, width, min_bucket_cnt, max_bucket_cnt))) { - LOG_WARN("failed to est bucket count", K(ret)); - } + est_bucket_cnt = hp_infras_->est_bucket_count(rows, width, min_bucket_cnt, max_bucket_cnt); } - return ret; + return est_bucket_cnt; } int ObHashPartInfrastructureVecImpl::set_funcs( diff --git a/src/sql/engine/ob_bit_vector.h b/src/sql/engine/ob_bit_vector.h index 2d9db96e7d..330da2931c 100644 --- a/src/sql/engine/ob_bit_vector.h +++ b/src/sql/engine/ob_bit_vector.h @@ -659,7 +659,7 @@ OB_INLINE int ObBitVectorImpl::inner_foreach(const ObBitVectorImpl size) { mini_cnt = size - tmp_step; } - for (int64_t j = 0; j < mini_cnt; j++) { + for (int64_t j = 0; OB_SUCC(ret) && j < mini_cnt; j++) { int64_t k = j + tmp_step; ret = op(k); }