fix merge group by overwrite T_QUESTIONMARK leads div core

This commit is contained in:
ls0
2021-07-29 21:09:13 +08:00
committed by wangzelin.wzl
parent 2614023cbf
commit 8a519477bb
4 changed files with 38 additions and 13 deletions

View File

@ -1561,15 +1561,13 @@ void ObHashJoinOp::calc_cache_aware_partition_count()
int64_t tmp_partition_cnt_per_level = max_partition_count_per_level_;
if (total_partition_cnt > tmp_partition_cnt_per_level) {
level1_part_count_ = part_count_;
OB_ASSERT(0 != level1_part_count_);
level1_bit_ = __builtin_ctz(level1_part_count_);
level1_bit_ = (0 == level1_part_count_) ? 0 : __builtin_ctz(level1_part_count_);
level2_part_count_ = total_partition_cnt / level1_part_count_;
level2_part_count_ =
level2_part_count_ > tmp_partition_cnt_per_level ? tmp_partition_cnt_per_level : level2_part_count_;
} else {
level1_part_count_ = total_partition_cnt > part_count_ ? total_partition_cnt : part_count_;
OB_ASSERT(0 != level1_part_count_);
level1_bit_ = __builtin_ctz(level1_part_count_);
level1_bit_ = (0 == level1_part_count_) ? 0 : __builtin_ctz(level1_part_count_);
}
LOG_TRACE("partition count",
K(total_partition_cnt),
@ -2758,7 +2756,11 @@ int ObHashJoinOp::get_next_probe_partition()
} else {
// two level
OB_ASSERT(0 != level2_part_count_);
int64_t level1_part_idx = (cur_full_right_partition_ >> (__builtin_ctz(level2_part_count_)));
int64_t leading_zero = 0;
if (0 != level2_part_count_) {
leading_zero = __builtin_ctz(level2_part_count_);
}
int64_t level1_part_idx = (cur_full_right_partition_ >> (leading_zero));
if (level1_part_idx < dump_part_count) {
cur_left_hist_ = &part_histograms_[cur_full_right_partition_];
break;

View File

@ -307,13 +307,11 @@ private:
void set_part_count(int64_t part_shift, int64_t level1_part_count, int64_t level2_part_count)
{
OB_ASSERT(0 != level1_part_count);
OB_ASSERT(0 != level2_part_count);
part_shift_ = part_shift;
level_one_part_count_ = level1_part_count;
level_two_part_count_ = level2_part_count;
level1_bit_ = __builtin_ctz(level1_part_count);
level2_bit_ = __builtin_ctz(level2_part_count);
level1_bit_ = (0 == level1_part_count) ? 0 : __builtin_ctz(level1_part_count);
level2_bit_ = (0 == level2_part_count) ? 0 : __builtin_ctz(level2_part_count);
}
bool is_valid()
{