summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands/group.cpp
diff options
context:
space:
mode:
authorJason Rassi <rassi@10gen.com>2014-09-05 18:44:18 -0400
committerJason Rassi <rassi@10gen.com>2014-09-08 20:30:18 -0400
commit266b75ca868a95fd2a4e30e3cf4898de1e13698d (patch)
tree189beaeea2aa75ed07f476208c1604cb29a7c33d /src/mongo/db/commands/group.cpp
parent3c23add3707d5b0b08c4cf058c2e4963244eff4f (diff)
downloadmongo-266b75ca868a95fd2a4e30e3cf4898de1e13698d.tar.gz
SERVER-14099 Add explain command support for group
Diffstat (limited to 'src/mongo/db/commands/group.cpp')
-rw-r--r--src/mongo/db/commands/group.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/mongo/db/commands/group.cpp b/src/mongo/db/commands/group.cpp
index 676bf75bf68..5a861d09636 100644
--- a/src/mongo/db/commands/group.cpp
+++ b/src/mongo/db/commands/group.cpp
@@ -169,4 +169,28 @@ namespace mongo {
return true;
}
+ Status GroupCommand::explain(OperationContext* txn,
+ const std::string& dbname,
+ const BSONObj& cmdObj,
+ Explain::Verbosity verbosity,
+ BSONObjBuilder* out) const {
+ GroupRequest groupRequest;
+ Status parseRequestStatus = parseRequest(dbname, cmdObj, &groupRequest);
+ if (!parseRequestStatus.isOK()) {
+ return parseRequestStatus;
+ }
+
+ Client::ReadContext ctx(txn, groupRequest.ns);
+ Database* db = ctx.ctx().db();
+
+ PlanExecutor *rawPlanExecutor;
+ Status getExecStatus = getExecutorGroup(txn, db, groupRequest, &rawPlanExecutor);
+ if (!getExecStatus.isOK()) {
+ return getExecStatus;
+ }
+ scoped_ptr<PlanExecutor> planExecutor(rawPlanExecutor);
+
+ return Explain::explainStages(planExecutor.get(), verbosity, out);
+ }
+
} // namespace mongo