summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2017-06-22 16:55:04 -0400
committerMathias Stearn <mathias@10gen.com>2017-07-13 16:53:12 -0400
commita6cc94d141f13feff33178a769c81282c7bc0170 (patch)
tree1a043a3718c54e8522f8b9bf0932c8d7f96ae79f /src/mongo/db/commands
parent8204c7dacf17851057dda165e6d1638cbff70cbf (diff)
downloadmongo-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.cpp11
-rw-r--r--src/mongo/db/commands/distinct.cpp11
-rw-r--r--src/mongo/db/commands/find_cmd.cpp25
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.