diff options
author | Mathias Stearn <mathias@10gen.com> | 2017-06-22 16:55:04 -0400 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2017-07-13 16:53:12 -0400 |
commit | a6cc94d141f13feff33178a769c81282c7bc0170 (patch) | |
tree | 1a043a3718c54e8522f8b9bf0932c8d7f96ae79f /src/mongo/db/commands | |
parent | 8204c7dacf17851057dda165e6d1638cbff70cbf (diff) | |
download | mongo-a6cc94d141f13feff33178a769c81282c7bc0170.tar.gz |
SERVER-29731 Unify logic around directly invoking a command
Diffstat (limited to 'src/mongo/db/commands')
-rw-r--r-- | src/mongo/db/commands/count_cmd.cpp | 11 | ||||
-rw-r--r-- | src/mongo/db/commands/distinct.cpp | 11 | ||||
-rw-r--r-- | src/mongo/db/commands/find_cmd.cpp | 25 |
3 files changed, 23 insertions, 24 deletions
diff --git a/src/mongo/db/commands/count_cmd.cpp b/src/mongo/db/commands/count_cmd.cpp index b34eb049b0b..2a3db9a0341 100644 --- a/src/mongo/db/commands/count_cmd.cpp +++ b/src/mongo/db/commands/count_cmd.cpp @@ -177,16 +177,15 @@ public: return appendCommandStatus(result, viewAggregation.getStatus()); } - BSONObjBuilder aggResult; - (void)Command::findCommand("aggregate") - ->run(opCtx, dbname, viewAggregation.getValue(), errmsg, aggResult); + BSONObj aggResult = Command::runCommandDirectly( + opCtx, OpMsgRequest::fromDBAndBody(dbname, std::move(viewAggregation.getValue()))); - if (ResolvedView::isResolvedViewErrorResponse(aggResult.asTempObj())) { - result.appendElements(aggResult.obj()); + if (ResolvedView::isResolvedViewErrorResponse(aggResult)) { + result.appendElements(aggResult); return false; } - ViewResponseFormatter formatter(aggResult.obj()); + ViewResponseFormatter formatter(aggResult); Status formatStatus = formatter.appendAsCountResponse(&result); if (!formatStatus.isOK()) { return appendCommandStatus(result, formatStatus); diff --git a/src/mongo/db/commands/distinct.cpp b/src/mongo/db/commands/distinct.cpp index 521862f0ccf..ba72b5cd7a6 100644 --- a/src/mongo/db/commands/distinct.cpp +++ b/src/mongo/db/commands/distinct.cpp @@ -178,17 +178,16 @@ public: if (!viewAggregation.isOK()) { return appendCommandStatus(result, viewAggregation.getStatus()); } - BSONObjBuilder aggResult; - (void)Command::findCommand("aggregate") - ->run(opCtx, dbname, viewAggregation.getValue(), errmsg, aggResult); + BSONObj aggResult = Command::runCommandDirectly( + opCtx, OpMsgRequest::fromDBAndBody(dbname, std::move(viewAggregation.getValue()))); - if (ResolvedView::isResolvedViewErrorResponse(aggResult.asTempObj())) { - result.appendElements(aggResult.obj()); + if (ResolvedView::isResolvedViewErrorResponse(aggResult)) { + result.appendElements(aggResult); return false; } - ViewResponseFormatter formatter(aggResult.obj()); + ViewResponseFormatter formatter(aggResult); Status formatStatus = formatter.appendAsDistinctResponse(&result); if (!formatStatus.isOK()) { return appendCommandStatus(result, formatStatus); diff --git a/src/mongo/db/commands/find_cmd.cpp b/src/mongo/db/commands/find_cmd.cpp index e7d40b08c70..c597fbcc0e9 100644 --- a/src/mongo/db/commands/find_cmd.cpp +++ b/src/mongo/db/commands/find_cmd.cpp @@ -53,6 +53,7 @@ #include "mongo/db/server_parameters.h" #include "mongo/db/service_context.h" #include "mongo/db/stats/counters.h" +#include "mongo/rpc/get_status_from_command_result.h" #include "mongo/util/log.h" namespace mongo { @@ -284,19 +285,19 @@ public: if (!viewAggregationCommand.isOK()) return appendCommandStatus(result, viewAggregationCommand.getStatus()); - Command* agg = Command::findCommand("aggregate"); - try { - agg->run(opCtx, dbname, viewAggregationCommand.getValue(), errmsg, result); - } catch (DBException& error) { - if (error.getCode() == ErrorCodes::InvalidPipelineOperator) { - return appendCommandStatus( - result, - {ErrorCodes::InvalidPipelineOperator, - str::stream() << "Unsupported in view pipeline: " << error.what()}); - } - return appendCommandStatus(result, error.toStatus()); + BSONObj aggResult = Command::runCommandDirectly( + opCtx, + OpMsgRequest::fromDBAndBody(dbname, std::move(viewAggregationCommand.getValue()))); + auto status = getStatusFromCommandResult(aggResult); + if (status.code() == ErrorCodes::InvalidPipelineOperator) { + return appendCommandStatus( + result, + {ErrorCodes::InvalidPipelineOperator, + str::stream() << "Unsupported in view pipeline: " << status.reason()}); } - return true; + result.resetToEmpty(); + result.appendElements(aggResult); + return status.isOK(); } // Get the execution plan for the query. |