diff --git a/deps/oblib/src/common/ob_common_types.h b/deps/oblib/src/common/ob_common_types.h index 661055b65d..a2a29747b0 100644 --- a/deps/oblib/src/common/ob_common_types.h +++ b/deps/oblib/src/common/ob_common_types.h @@ -174,6 +174,7 @@ struct ObQueryFlag } void reset() { flag_ = 0; } inline bool is_reverse_scan() const { return scan_order_ == Reverse; } + inline bool is_ordered_scan() const { return scan_order_ == ObQueryFlag::Forward || scan_order_ == ObQueryFlag::Reverse; } inline bool is_daily_merge() const { return daily_merge_; } inline bool is_rmmb_optimized() const { return rmmb_optimize_; } inline bool is_whole_macro_scan() const { return whole_macro_scan_; } diff --git a/src/storage/access/ob_index_tree_prefetcher.cpp b/src/storage/access/ob_index_tree_prefetcher.cpp index 207fce38ea..baaeb2b5d6 100644 --- a/src/storage/access/ob_index_tree_prefetcher.cpp +++ b/src/storage/access/ob_index_tree_prefetcher.cpp @@ -105,10 +105,6 @@ int ObIndexTreePrefetcher::switch_context( for (int64_t i = 0; i < DEFAULT_GET_MICRO_DATA_HANDLE_CNT; ++i) { micro_handles_[i].reset(); } - micro_block_handle_mgr_.reset(); - if (OB_FAIL(micro_block_handle_mgr_.init(true, false, *access_ctx.stmt_allocator_))) { - LOG_WARN("failed to init block handle mgr", K(ret)); - } } else { rescan_cnt_++; if (rescan_cnt_ >= MAX_RESCAN_HOLD_LIMIT) { @@ -449,7 +445,7 @@ int ObIndexTreeMultiPrefetcher::init( LOG_WARN("range count should be greater than 0", K(ret), K(range_count)); } else if (OB_FAIL(ext_read_handles_.prepare_reallocate(max_handle_prefetching_cnt_))) { LOG_WARN("Fail to init read_handles", K(ret), K(max_handle_prefetching_cnt_)); - } else if (OB_FAIL(micro_block_handle_mgr_.init(range_count > 1, false, *access_ctx.stmt_allocator_))) { + } else if (OB_FAIL(micro_block_handle_mgr_.init(range_count > 1, access_ctx_->query_flag_.is_ordered_scan(), *access_ctx.stmt_allocator_))) { LOG_WARN("failed to init block handle mgr", K(ret)); } else { is_inited_ = true; @@ -488,10 +484,6 @@ int ObIndexTreeMultiPrefetcher::switch_context( for (int64_t i = 0; i < ext_read_handles_.count(); ++i) { ext_read_handles_.at(i).reset(); } - micro_block_handle_mgr_.reset(); - if (OB_FAIL(micro_block_handle_mgr_.init(true, false, *access_ctx.stmt_allocator_))) { - LOG_WARN("failed to init block handle mgr", K(ret)); - } } else { rescan_cnt_++; if (rescan_cnt_ >= MAX_RESCAN_HOLD_LIMIT) { @@ -740,7 +732,7 @@ int ObIndexTreeMultiPassPrefetcher::init( bool is_multi_range = false; if (OB_FAIL(init_basic_info(iter_type, sstable, access_ctx, query_range, is_multi_range))) { LOG_WARN("Fail to init basic info", K(ret), K(access_ctx)); - } else if (OB_FAIL(micro_block_handle_mgr_.init(is_multi_range, false, *access_ctx.stmt_allocator_))) { + } else if (OB_FAIL(micro_block_handle_mgr_.init(is_multi_range, access_ctx_->query_flag_.is_ordered_scan(), *access_ctx.stmt_allocator_))) { LOG_WARN("failed to init block handle mgr", K(ret)); } else { for (int64_t level = 0; OB_SUCC(ret) && level < index_tree_height_; level++) { @@ -781,10 +773,6 @@ int ObIndexTreeMultiPassPrefetcher::switch_context( for (int16_t level = 0; level < tree_handles_.count(); level++) { tree_handles_.at(level).reset(); } - micro_block_handle_mgr_.reset(); - if (OB_FAIL(micro_block_handle_mgr_.init(true, false, *access_ctx.stmt_allocator_))) { - LOG_WARN("failed to init block handle mgr", K(ret)); - } } } if (OB_SUCC(ret)) { diff --git a/src/storage/access/ob_table_scan_range.cpp b/src/storage/access/ob_table_scan_range.cpp index f0388d49c6..a382b3b691 100644 --- a/src/storage/access/ob_table_scan_range.cpp +++ b/src/storage/access/ob_table_scan_range.cpp @@ -191,8 +191,7 @@ int ObTableScanRange::init_rowkeys(const common::ObIArray &r if (OB_SUCC(ret)) { if (rowkeys_.empty()) { status_ = EMPTY; - } else if (rowkeys_.count() > 1 && nullptr != datum_utils - && (scan_flag.scan_order_ == ObQueryFlag::Forward || scan_flag.scan_order_ == ObQueryFlag::Reverse)) { + } else if (rowkeys_.count() > 1 && nullptr != datum_utils && scan_flag.is_ordered_scan()) { ObDatumComparor comparor(*datum_utils, ret, scan_flag.is_reverse_scan()); std::sort(rowkeys_.begin(), rowkeys_.end(), comparor); if (OB_FAIL(ret)) { @@ -240,8 +239,7 @@ int ObTableScanRange::init_ranges(const common::ObIArray &ra if (OB_SUCC(ret)) { if (ranges_.empty()) { status_ = EMPTY; - } else if (ranges_.count() > 1 && nullptr != datum_utils - && (scan_flag.scan_order_ == ObQueryFlag::Forward || scan_flag.scan_order_ == ObQueryFlag::Reverse)) { + } else if (ranges_.count() > 1 && nullptr != datum_utils && scan_flag.is_ordered_scan()) { ObDatumComparor comparor(*datum_utils, ret, scan_flag.is_reverse_scan()); std::sort(ranges_.begin(), ranges_.end(), comparor); if (OB_FAIL(ret)) { @@ -288,8 +286,7 @@ int ObTableScanRange::init_ranges_in_skip_scan(const common::ObIArray 1 && nullptr != datum_utils - && (scan_flag.scan_order_ == ObQueryFlag::Forward || scan_flag.scan_order_ == ObQueryFlag::Reverse)) { + } else if (wrapped_ranges_.count() > 1 && nullptr != datum_utils && scan_flag.is_ordered_scan()) { ObDatumComparor comparor(*datum_utils, ret, scan_flag.is_reverse_scan()); std::sort(wrapped_ranges_.begin(), wrapped_ranges_.end(), comparor); if (OB_FAIL(ret)) {