@@ -2547,40 +2547,42 @@ void ReadFromMergeTree::initializePipeline(QueryPipelineBuilder & pipeline, cons
25472547 // / Optionally initializes index build context to filter on data reading. This context is shared across multiple
25482548 // / MergeTreeSelectProcessor instances, and is used to construct and apply index filters in a thread-safe manner.
25492549 MergeTreeIndexBuildContextPtr index_build_context;
2550-
2551- // / Vector similarity indexes are not applicable on data reads.
2552- UsefulSkipIndexes applicable_skip_indexes = indexes->skip_indexes ;
2553- std::erase_if (applicable_skip_indexes.useful_indices , [](const auto & idx) { return idx.index ->isVectorSimilarityIndex (); });
2554-
2555- bool build_skip_index_reader = indexes && indexes->use_skip_indexes && !applicable_skip_indexes.empty ()
2550+ bool build_skip_index_reader = indexes && indexes->use_skip_indexes && !indexes->skip_indexes .empty ()
25562551 && (!query_info.isFinal () || !settings[Setting::use_skip_indexes_if_final_exact_mode])
25572552 && settings[Setting::use_skip_indexes_on_data_read] && !is_parallel_reading_from_replicas;
25582553
25592554 if (build_skip_index_reader)
25602555 {
2561- RangesByIndex read_ranges;
2562- PartRemainingMarks part_remaining_marks;
2563- for (const auto & ranges : result.parts_with_ranges )
2556+ // / Vector similarity indexes are not applicable on data reads.
2557+ UsefulSkipIndexes applicable_skip_indexes = indexes->skip_indexes ;
2558+ std::erase_if (applicable_skip_indexes.useful_indices , [](const auto & idx) { return idx.index ->isVectorSimilarityIndex (); });
2559+
2560+ if (!applicable_skip_indexes.empty ())
25642561 {
2565- read_ranges.emplace (ranges.part_index_in_query , ranges);
2566- part_remaining_marks.emplace (ranges.part_index_in_query , ranges.getMarksCount ());
2567- }
2562+ RangesByIndex read_ranges;
2563+ PartRemainingMarks part_remaining_marks;
2564+ for (const auto & ranges : result.parts_with_ranges )
2565+ {
2566+ read_ranges.emplace (ranges.part_index_in_query , ranges);
2567+ part_remaining_marks.emplace (ranges.part_index_in_query , ranges.getMarksCount ());
2568+ }
25682569
2569- MergeTreeSkipIndexReaderPtr skip_index_reader = std::make_shared<MergeTreeSkipIndexReader>(
2570- applicable_skip_indexes,
2571- context->getIndexMarkCache (),
2572- context->getIndexUncompressedCache (),
2573- context->getVectorSimilarityIndexCache (),
2574- reader_settings,
2575- getLogger (" MergeTreeSkipIndexReader" ));
2570+ MergeTreeSkipIndexReaderPtr skip_index_reader = std::make_shared<MergeTreeSkipIndexReader>(
2571+ applicable_skip_indexes,
2572+ context->getIndexMarkCache (),
2573+ context->getIndexUncompressedCache (),
2574+ context->getVectorSimilarityIndexCache (),
2575+ reader_settings,
2576+ getLogger (" MergeTreeSkipIndexReader" ));
25762577
2577- // / TODO(ab): If projection index is available, build projection index reader and pass it into result pool.
2578+ // / TODO(ab): If projection index is available, build projection index reader and pass it into result pool.
25782579
2579- MergeTreeIndexReadResultPoolPtr index_read_result_pool
2580- = std::make_shared<MergeTreeIndexReadResultPool>(std::move (skip_index_reader));
2580+ MergeTreeIndexReadResultPoolPtr index_read_result_pool
2581+ = std::make_shared<MergeTreeIndexReadResultPool>(std::move (skip_index_reader));
25812582
2582- index_build_context = std::make_shared<MergeTreeIndexBuildContext>(
2583- std::move (read_ranges), std::move (index_read_result_pool), std::move (part_remaining_marks));
2583+ index_build_context = std::make_shared<MergeTreeIndexBuildContext>(
2584+ std::move (read_ranges), std::move (index_read_result_pool), std::move (part_remaining_marks));
2585+ }
25842586 }
25852587
25862588 Pipe pipe = output_each_partition_through_separate_port
0 commit comments