Fix build range bug after refresh table
This commit is contained in:
		@ -111,7 +111,7 @@ int ObMultipleMultiScanMerge::calc_scan_range()
 | 
				
			|||||||
          const ObDatumRowkey &range_key = is_reverse_scan ? range.get_start_key() : range.get_end_key();
 | 
					          const ObDatumRowkey &range_key = is_reverse_scan ? range.get_start_key() : range.get_end_key();
 | 
				
			||||||
          if (OB_FAIL(range_key.compare(curr_rowkey_, read_info->get_datum_utils(), cmp_ret))) {
 | 
					          if (OB_FAIL(range_key.compare(curr_rowkey_, read_info->get_datum_utils(), cmp_ret))) {
 | 
				
			||||||
            STORAGE_LOG(WARN, "Failed to cmopare range key ", K(ret), K(range_key), K(curr_rowkey_));
 | 
					            STORAGE_LOG(WARN, "Failed to cmopare range key ", K(ret), K(range_key), K(curr_rowkey_));
 | 
				
			||||||
          } else if (cmp_ret > 0) {
 | 
					          } else if ((is_reverse_scan && cmp_ret < 0) || (!is_reverse_scan && cmp_ret > 0)) {
 | 
				
			||||||
            range.change_boundary(curr_rowkey_, is_reverse_scan);
 | 
					            range.change_boundary(curr_rowkey_, is_reverse_scan);
 | 
				
			||||||
            range_idx_delta_ += i;
 | 
					            range_idx_delta_ += i;
 | 
				
			||||||
            if (OB_FAIL(cow_ranges_.push_back(range))) {
 | 
					            if (OB_FAIL(cow_ranges_.push_back(range))) {
 | 
				
			||||||
 | 
				
			|||||||
@ -532,6 +532,23 @@ int ObTableScanIterator::init_and_open_get_merge_iter_()
 | 
				
			|||||||
  return ret;
 | 
					  return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ObTableScanIterator::sort_sample_ranges()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
 | 
					  const ObStorageDatumUtils &datum_utils = scan_param_->table_param_->get_read_info().get_datum_utils();
 | 
				
			||||||
 | 
					  if (OB_UNLIKELY(!datum_utils.is_valid())) {
 | 
				
			||||||
 | 
					    ret = OB_ERR_UNEXPECTED;
 | 
				
			||||||
 | 
					    STORAGE_LOG(WARN, "Unexpected error for invalid datum utils", K(ret), KPC(scan_param_->table_param_));
 | 
				
			||||||
 | 
					  } else if (sample_ranges_.count() > 1 && scan_param_->scan_flag_.is_ordered_scan()) {
 | 
				
			||||||
 | 
					    ObDatumComparor<ObDatumRange> comparor(datum_utils, ret, scan_param_->scan_flag_.is_reverse_scan());
 | 
				
			||||||
 | 
					    std::sort(sample_ranges_.begin(), sample_ranges_.end(), comparor);
 | 
				
			||||||
 | 
					    if (OB_FAIL(ret)) {
 | 
				
			||||||
 | 
					      STORAGE_LOG(WARN, "Failed to sort datum ranges", K(ret), K_(sample_ranges));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ObTableScanIterator::init_and_open_scan_merge_iter_()
 | 
					int ObTableScanIterator::init_and_open_scan_merge_iter_()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int ret = OB_SUCCESS;
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
@ -543,6 +560,8 @@ int ObTableScanIterator::init_and_open_scan_merge_iter_()
 | 
				
			|||||||
      ObGetSampleIterHelper sample_iter_helper(table_scan_range_, main_table_ctx_, *scan_param_, get_table_param_);
 | 
					      ObGetSampleIterHelper sample_iter_helper(table_scan_range_, main_table_ctx_, *scan_param_, get_table_param_);
 | 
				
			||||||
      if (OB_FAIL(sample_iter_helper.check_scan_range_count(need_scan_multiple_range, sample_ranges_))) {
 | 
					      if (OB_FAIL(sample_iter_helper.check_scan_range_count(need_scan_multiple_range, sample_ranges_))) {
 | 
				
			||||||
        STORAGE_LOG(WARN, "check scan range count failed", KR(ret), KPC(scan_param_));
 | 
					        STORAGE_LOG(WARN, "check scan range count failed", KR(ret), KPC(scan_param_));
 | 
				
			||||||
 | 
					      } else if (OB_FAIL(sort_sample_ranges())) {
 | 
				
			||||||
 | 
					        STORAGE_LOG(WARN, "failed to sort sample ranges", K(ret));
 | 
				
			||||||
      } else if (need_scan_multiple_range) {
 | 
					      } else if (need_scan_multiple_range) {
 | 
				
			||||||
        // this branch means the sample is row(memtable row) sample
 | 
					        // this branch means the sample is row(memtable row) sample
 | 
				
			||||||
        if (!scan_param_->sample_info_.is_row_sample()) {
 | 
					        if (!scan_param_->sample_info_.is_row_sample()) {
 | 
				
			||||||
 | 
				
			|||||||
@ -96,6 +96,7 @@ private:
 | 
				
			|||||||
  int init_and_open_block_sample_iter_();
 | 
					  int init_and_open_block_sample_iter_();
 | 
				
			||||||
  int init_and_open_row_sample_iter_();
 | 
					  int init_and_open_row_sample_iter_();
 | 
				
			||||||
  int init_and_open_memtable_row_sample_iter_(const ObIArray<blocksstable::ObDatumRange> &scan_ranges);
 | 
					  int init_and_open_memtable_row_sample_iter_(const ObIArray<blocksstable::ObDatumRange> &scan_ranges);
 | 
				
			||||||
 | 
					  int sort_sample_ranges();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  bool is_inited_;
 | 
					  bool is_inited_;
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user