// static Status SubplanStage::make(Collection* collection, WorkingSet* ws, const QueryPlannerParams& params, CanonicalQuery* cq, SubplanStage** out) { auto_ptr<SubplanStage> autoStage(new SubplanStage(collection, ws, params, cq)); Status planningStatus = autoStage->planSubqueries(); if (!planningStatus.isOK()) { return planningStatus; } *out = autoStage.release(); return Status::OK(); }
// static Status SubplanStage::make(OperationContext* txn, Collection* collection, WorkingSet* ws, const QueryPlannerParams& params, CanonicalQuery* cq, SubplanStage** out) { auto_ptr<SubplanStage> autoStage(new SubplanStage(txn, collection, ws, params, cq)); // Plan each branch of the $or. Status planningStatus = autoStage->planSubqueries(); if (!planningStatus.isOK()) { return planningStatus; } // Use the multi plan stage to select a winning plan for each branch, and then // construct the overall winning plan from the resulting index tags. Status multiPlanStatus = autoStage->pickBestPlan(); if (!multiPlanStatus.isOK()) { return multiPlanStatus; } *out = autoStage.release(); return Status::OK(); }