fix merge set op do not assign last_left_idx leads core
This commit is contained in:
@ -143,7 +143,7 @@ int ObMergeExceptOp::inner_get_next_batch(const int64_t max_row_cnt)
|
||||
clear_evaluated_flag();
|
||||
const ObBatchRows *left_brs = nullptr;
|
||||
int64_t curr_left_idx = 0;
|
||||
int64_t last_left_idx = 0;
|
||||
int64_t last_left_idx = -1;
|
||||
if (OB_FAIL(left_->get_next_batch(batch_size, left_brs))) {
|
||||
LOG_WARN("failed to get next batch", K(ret));
|
||||
} else if (left_brs->end_ && 0 == left_brs->size_) {
|
||||
@ -225,7 +225,7 @@ int ObMergeExceptOp::inner_get_next_batch(const int64_t max_row_cnt)
|
||||
LOG_WARN("failed to convert batch", K(ret));
|
||||
} else if (left_brs->end_) {
|
||||
brs_.end_ = true;
|
||||
} else if (last_left_idx == left_brs->size_) {
|
||||
} else if (last_left_idx == left_brs->size_ || last_left_idx < 0) {
|
||||
// empty batch
|
||||
} else if (OB_UNLIKELY(left_brs->skip_->at(last_left_idx))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
|
@ -140,7 +140,7 @@ int ObMergeIntersectOp::inner_get_next_batch(const int64_t max_row_cnt)
|
||||
clear_evaluated_flag();
|
||||
const ObBatchRows *left_brs = nullptr;
|
||||
int64_t curr_left_idx = 0;
|
||||
int64_t last_left_idx = 0;
|
||||
int64_t last_left_idx = -1;
|
||||
if (OB_FAIL(left_->get_next_batch(batch_size, left_brs))) {
|
||||
LOG_WARN("failed to get next batch", K(ret));
|
||||
} else if (left_brs->end_ && 0 == left_brs->size_) {
|
||||
@ -215,8 +215,11 @@ int ObMergeIntersectOp::inner_get_next_batch(const int64_t max_row_cnt)
|
||||
LOG_WARN("failed to convert batch", K(ret));
|
||||
} else if (right_iter_end_) {
|
||||
brs_.end_ = true;
|
||||
} else if (last_left_idx == left_brs->size_) {
|
||||
} else if (last_left_idx == left_brs->size_ || last_left_idx < 0) {
|
||||
// empty batch
|
||||
} else if (OB_UNLIKELY(left_brs->skip_->at(last_left_idx))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get wrong last row", K(last_left_idx), K(curr_left_idx), K(ret));
|
||||
} else {
|
||||
ObEvalCtx::BatchInfoScopeGuard batch_info_guard(eval_ctx_);
|
||||
batch_info_guard.set_batch_idx(last_left_idx);
|
||||
|
@ -368,6 +368,9 @@ int ObMergeSetOp::locate_next_left_inside(ObOperator &child_op,
|
||||
&& OB_FAIL(cmp_(*last_row_.store_row_, child_op.get_spec().output_,
|
||||
curr_idx, eval_ctx_, cmp))) {
|
||||
LOG_WARN("failed to compare row", K(ret));
|
||||
} else if (last_idx < 0) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get wrong last idx", K(ret));
|
||||
} else if (nullptr == last_row_.store_row_
|
||||
&& OB_FAIL(cmp_(child_op.get_spec().output_, child_op.get_spec().output_,
|
||||
last_idx, curr_idx, eval_ctx_, cmp))) {
|
||||
|
Reference in New Issue
Block a user