bool PipelineCommand::run(const string &db, BSONObj &cmdObj, int options, string &errmsg, BSONObjBuilder &result, bool fromRepl) { intrusive_ptr<ExpressionContext> pCtx( ExpressionContext::create(&InterruptStatusMongod::status)); /* try to parse the command; if this fails, then we didn't run */ intrusive_ptr<Pipeline> pPipeline( Pipeline::parseCommand(errmsg, cmdObj, pCtx)); if (!pPipeline.get()) return false; string ns(parseNs(db, cmdObj)); if (pPipeline->isExplain()) return runExplain(result, errmsg, ns, db, pPipeline, pCtx); else return runExecute(result, errmsg, ns, db, pPipeline, pCtx); }
void EvalSqlGrp(const void *data, qCtx *pContext, qStr *pStream, qArgAry *args) { if (args->Count() > 3) { CSqlGrp sg(pContext); qCtxTmp pCtx(pContext); pCtx.MapObj(&sg, &EvalGrpDetail, "sql-detail"); pCtx.MapObj(&sg, &EvalGrpHead, "sql-head"); pCtx.MapObj(&sg, &EvalGrpFoot, "sql-foot"); sg.SetArgs(&(*args)[2],args->Count()-2); qArgAry tmp; tmp.Add((*args)[0]); tmp.Add((*args)[1]); tmp.Add("%sql-detail%"); tmp.Add("%sql-head%"); tmp.Add("%sql-foot%"); pCtx.Eval(pStream, "sql", &tmp); } }