Bugfix for nested loop join operator

This commit is contained in:
obdev
2023-01-11 02:08:31 +00:00
committed by ob-robot
parent b4afba40e5
commit da62af66ea

View File

@ -863,8 +863,13 @@ int ObNestedLoopJoinOp::process_left_batch()
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
ObEvalCtx::BatchInfoScopeGuard batch_info_guard(eval_ctx_); ObEvalCtx::BatchInfoScopeGuard batch_info_guard(eval_ctx_);
batch_info_guard.set_batch_size(left_brs_->size_);
for (int64_t l_idx = 0; OB_SUCC(ret) && l_idx < left_brs_->size_; l_idx++) { for (int64_t l_idx = 0; OB_SUCC(ret) && l_idx < left_brs_->size_; l_idx++) {
// Note:
// Overwrite batch_size in the beginning of the loop as eval_ctx_.batch_size
// would be modified when processing right child.
// Adding seperated guards for left/right children can also solve the problem,
// we don't choose that way due to performance reason.
batch_info_guard.set_batch_size(left_brs_->size_);
if (!MY_SPEC.use_group_ && !MY_SPEC.enable_px_batch_rescan_) { if (!MY_SPEC.use_group_ && !MY_SPEC.enable_px_batch_rescan_) {
batch_info_guard.set_batch_idx(l_idx); batch_info_guard.set_batch_idx(l_idx);
if (left_brs_->skip_->exist(l_idx)) { continue; } if (left_brs_->skip_->exist(l_idx)) { continue; }