Fix check datum modified error
This commit is contained in:
		@ -782,10 +782,7 @@ int ObMergeGroupByOp::get_child_next_batch_row(
 | 
			
		||||
        K(const_cast<ObBatchRows *>(batch_rows)->size_));
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    if (aggr_processor_.get_need_advance_collect() &&
 | 
			
		||||
      brs_holder_.is_saved() && OB_FAIL(brs_holder_.restore())) {
 | 
			
		||||
      LOG_WARN("failed to restore child exprs", K(ret));
 | 
			
		||||
    } else if (OB_FAIL(child_->get_next_batch(max_row_cnt, batch_rows))) {
 | 
			
		||||
    if (OB_FAIL(child_->get_next_batch(max_row_cnt, batch_rows))) {
 | 
			
		||||
      LOG_WARN("failed to get child row", K(ret));
 | 
			
		||||
    } else if (aggr_processor_.get_need_advance_collect() &&
 | 
			
		||||
      OB_FAIL(brs_holder_.save(MY_SPEC.max_batch_size_))) {
 | 
			
		||||
@ -896,6 +893,8 @@ int ObMergeGroupByOp::advance_collect_result(int64_t group_id)
 | 
			
		||||
  clear_evaluated_flag();
 | 
			
		||||
  if (OB_FAIL(aggr_processor_.advance_collect_result(group_id))) {
 | 
			
		||||
    LOG_WARN("failed to calc and material distinct result", K(ret), K(group_id));
 | 
			
		||||
  } else if (OB_FAIL(brs_holder_.restore())) {
 | 
			
		||||
    LOG_WARN("failed to restore child exprs", K(ret));
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
@ -947,7 +946,13 @@ int ObMergeGroupByOp::inner_get_next_batch(const int64_t max_row_cnt)
 | 
			
		||||
          LOG_WARN("failed to process_batch_result", K(ret));
 | 
			
		||||
        } else if (stop_batch_iterating(*child_brs, output_batch_cnt)) {
 | 
			
		||||
          // backup child exprs for this round
 | 
			
		||||
          // for the vectorized merge distinct scenario, the result will be calculated and materialized
 | 
			
		||||
          // in advance. therefore, when a backup is performed after a batch processing is completed
 | 
			
		||||
          // the output expression of the child has been refilled. so, it is necessary to perform backup
 | 
			
		||||
          // after get next batch from the child operator, and there is no need to backup again.
 | 
			
		||||
          if (!aggr_processor_.get_need_advance_collect()) {
 | 
			
		||||
            OZ(brs_holder_.save(std::min(MY_SPEC.max_batch_size_, get_output_queue_cnt())));
 | 
			
		||||
          }
 | 
			
		||||
          LOG_DEBUG("break out of iteratation", K(child_brs->end_),
 | 
			
		||||
                    K(output_batch_cnt), K(output_queue_cnt_));
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user