diff options
Diffstat (limited to 'src/mongo/db/query/sbe_runtime_planner.cpp')
-rw-r--r-- | src/mongo/db/query/sbe_runtime_planner.cpp | 12 |
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(¤tCandidate, maxNumResults); + executeCandidateTrial(¤tCandidate, maxNumResults, /*isCachedPlanTrial*/ false); auto reads = tracker->getMetric<TrialRunTracker::TrialRunMetric::kNumReads>(); // We intentionally increment the metrics outside of the isOk/existedEarly check. |