Esempio n. 1
0
    // 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();
    }
Esempio n. 2
0
    // 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();
    }