summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/sbe_stage_builder_coll_scan.cpp
diff options
context:
space:
mode:
authorDrew Paroski <drew.paroski@mongodb.com>2020-08-20 13:14:45 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-09-03 23:11:22 +0000
commitf6f3a88b97bda6470d7a1b7ff73d2b577495d84f (patch)
treed64a9494bc2e7320f6d069e17256b98a32b08ec4 /src/mongo/db/query/sbe_stage_builder_coll_scan.cpp
parent4d43e298fe956c57b3cb0310bcd0785c19f75ef7 (diff)
downloadmongo-f6f3a88b97bda6470d7a1b7ff73d2b577495d84f.tar.gz
SERVER-48483 [SBE] Reimplement $or match expression translation
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.cpp22
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)};