summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/sbe_runtime_planner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/query/sbe_runtime_planner.cpp')
-rw-r--r--src/mongo/db/query/sbe_runtime_planner.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/mongo/db/query/sbe_runtime_planner.cpp b/src/mongo/db/query/sbe_runtime_planner.cpp
index 74e09a76ecd..b3f35938fdf 100644
--- a/src/mongo/db/query/sbe_runtime_planner.cpp
+++ b/src/mongo/db/query/sbe_runtime_planner.cpp
@@ -146,12 +146,13 @@ FetchDocStatus fetchNextDocument(
StatusWith<std::tuple<value::SlotAccessor*, value::SlotAccessor*, bool>>
BaseRuntimePlanner::prepareExecutionPlan(PlanStage* root,
- stage_builder::PlanStageData* data) const {
+ stage_builder::PlanStageData* data,
+ const bool preparingFromCache) const {
invariant(root);
invariant(data);
stage_builder::prepareSlotBasedExecutableTree(
- _opCtx, root, data, _cq, _collections, _yieldPolicy);
+ _opCtx, root, data, _cq, _collections, _yieldPolicy, preparingFromCache);
value::SlotAccessor* resultSlot{nullptr};
if (auto slot = data->outputs.getIfExists(stage_builder::PlanStageSlots::kResult); slot) {
@@ -179,10 +180,11 @@ BaseRuntimePlanner::prepareExecutionPlan(PlanStage* root,
}
void BaseRuntimePlanner::executeCandidateTrial(plan_ranker::CandidatePlan* candidate,
- size_t maxNumResults) {
+ size_t maxNumResults,
+ const bool isCachedPlanTrial) {
_indexExistenceChecker.check();
- auto status = prepareExecutionPlan(candidate->root.get(), &candidate->data);
+ auto status = prepareExecutionPlan(candidate->root.get(), &candidate->data, isCachedPlanTrial);
if (!status.isOK()) {
candidate->status = status.getStatus();
return;
@@ -274,7 +276,7 @@ std::vector<plan_ranker::CandidatePlan> BaseRuntimePlanner::collectExecutionStat
auto& currentCandidate = candidates.back();
// Store the original plan in the CandidatePlan.
currentCandidate.clonedPlan.emplace(std::move(origPlan));
- executeCandidateTrial(&currentCandidate, maxNumResults);
+ executeCandidateTrial(&currentCandidate, maxNumResults, /*isCachedPlanTrial*/ false);
auto reads = tracker->getMetric<TrialRunTracker::TrialRunMetric::kNumReads>();
// We intentionally increment the metrics outside of the isOk/existedEarly check.