diff --git a/src/sql/engine/join/ob_merge_join_op.cpp b/src/sql/engine/join/ob_merge_join_op.cpp index ea146bcddb..b4eab12755 100644 --- a/src/sql/engine/join/ob_merge_join_op.cpp +++ b/src/sql/engine/join/ob_merge_join_op.cpp @@ -975,6 +975,7 @@ int ObMergeJoinOp::ChildBatchFetcher::get_next_batch(const int64_t max_row_cnt) for (int64_t i = 0; i < backup_datums_.count(); i++) { ObDatum *datum = all_exprs_->at(i)->locate_batch_datums(merge_join_op_.eval_ctx_); MEMCPY(datum, backup_datums_.at(i) + backup_rows_used_, sizeof(ObDatum) * restore_cnt); + all_exprs_->at(i)->set_evaluated_projected(merge_join_op_.eval_ctx_); } brs_.size_ = restore_cnt; brs_.end_ = false; @@ -1117,7 +1118,6 @@ int ObMergeJoinOp::ChildBatchFetcher::get_next_small_group(int64_t &cmp_res) } } if (OB_SUCC(ret) && cur_idx_ < brs_.size_) { - merge_join_op_.clear_evaluated_flag(); if (OB_FAIL(merge_join_op_.calc_equal_conds_with_batch_idx(cmp_res))) { LOG_WARN("calc equal conds with batch index failed", K(ret)); } else { @@ -1161,7 +1161,6 @@ int ObMergeJoinOp::ChildBatchFetcher::get_next_equal_group(JoinRowList &row_list } if (OB_SUCC(ret) && !all_batch_finished) { - merge_join_op_.clear_evaluated_flag(); if (OB_FAIL(merge_join_op_.calc_equal_conds_with_stored_row( stored_row, cur_idx_, cmp_res))) { LOG_WARN("calc equal conds failed", K(ret)); @@ -1383,7 +1382,6 @@ int ObMergeJoinOp::iterate_both_chidren(ObEvalCtx::BatchInfoScopeGuard &guard) } else if (OB_FAIL(match_groups_.push_back(std::make_pair(l_row_list, r_row_list)))) { LOG_WARN("match group push back failed", K(ret)); } else if (!left_brs_fetcher_.iter_end() && !right_brs_fetcher_.iter_end()) { - clear_evaluated_flag(); if (OB_FAIL(calc_equal_conds_with_batch_idx(cmp_res_))) { LOG_WARN("calc equal cond with batch index failed", K(ret)); } @@ -1730,6 +1728,7 @@ int ObMergeJoinOp::output_side_rows(ChildBatchFetcher &batch_fetcher, batch_join_state_ = BJS_JOIN_END; } else if (OB_FAIL(batch_fetcher.brs_holder_.restore())) { LOG_WARN("fetcher restore failed", K(ret)); + } else if (FALSE_IT(clear_evaluated_flag())) { } else if (OB_FAIL(batch_fetcher.get_next_batch(max_row_cnt))) { LOG_WARN("get child next batch failed", K(ret)); } else if (OB_UNLIKELY(batch_fetcher.iter_end())) {