diff options
Diffstat (limited to 'src/mongo/db/query/sbe_stage_builder_coll_scan.cpp')
-rw-r--r-- | src/mongo/db/query/sbe_stage_builder_coll_scan.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/mongo/db/query/sbe_stage_builder_coll_scan.cpp b/src/mongo/db/query/sbe_stage_builder_coll_scan.cpp index 85fe75f5508..05f9bcefb96 100644 --- a/src/mongo/db/query/sbe_stage_builder_coll_scan.cpp +++ b/src/mongo/db/query/sbe_stage_builder_coll_scan.cpp @@ -210,7 +210,16 @@ generateOptimizedOplogScan(OperationContext* opCtx, } if (csn->filter) { - stage = generateFilter(csn->filter.get(), std::move(stage), slotIdGenerator, resultSlot); + auto relevantSlots = sbe::makeSV(resultSlot, recordIdSlot); + if (tsSlot) { + relevantSlots.push_back(*tsSlot); + } + + stage = generateFilter(csn->filter.get(), + std::move(stage), + slotIdGenerator, + resultSlot, + std::move(relevantSlots)); // We may be requested to stop applying the filter after the first match. This can happen // if the query is just a lower bound on 'ts' on a forward scan. In this case every document @@ -347,7 +356,16 @@ generateGenericCollScan(const Collection* collection, // 'generateOptimizedOplogScan()'. invariant(!csn->stopApplyingFilterAfterFirstMatch); - stage = generateFilter(csn->filter.get(), std::move(stage), slotIdGenerator, resultSlot); + auto relevantSlots = sbe::makeSV(resultSlot, recordIdSlot); + if (tsSlot) { + relevantSlots.push_back(*tsSlot); + } + + stage = generateFilter(csn->filter.get(), + std::move(stage), + slotIdGenerator, + resultSlot, + std::move(relevantSlots)); } return {resultSlot, recordIdSlot, tsSlot, std::move(stage)}; |