summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/count_request.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/query/count_request.cpp')
-rw-r--r--src/mongo/db/query/count_request.cpp134
1 files changed, 64 insertions, 70 deletions
diff --git a/src/mongo/db/query/count_request.cpp b/src/mongo/db/query/count_request.cpp
index a587586590f..8541a5cc12b 100644
--- a/src/mongo/db/query/count_request.cpp
+++ b/src/mongo/db/query/count_request.cpp
@@ -36,96 +36,90 @@
namespace mongo {
namespace {
- const char kCmdName[] = "count";
- const char kQueryField[] = "query";
- const char kLimitField[] = "limit";
- const char kSkipField[] = "skip";
- const char kHintField[] = "hint";
+const char kCmdName[] = "count";
+const char kQueryField[] = "query";
+const char kLimitField[] = "limit";
+const char kSkipField[] = "skip";
+const char kHintField[] = "hint";
-} // namespace
+} // namespace
- CountRequest::CountRequest(const std::string& fullNs, BSONObj query)
- : _fullNs(fullNs),
- _query(query.getOwned()) {
- }
+CountRequest::CountRequest(const std::string& fullNs, BSONObj query)
+ : _fullNs(fullNs), _query(query.getOwned()) {}
- void CountRequest::setHint(BSONObj hint) {
- _hint = hint.getOwned();
- }
+void CountRequest::setHint(BSONObj hint) {
+ _hint = hint.getOwned();
+}
- BSONObj CountRequest::toBSON() const {
- BSONObjBuilder builder;
+BSONObj CountRequest::toBSON() const {
+ BSONObjBuilder builder;
- builder.append(kCmdName, _fullNs);
- builder.append(kQueryField, _query);
+ builder.append(kCmdName, _fullNs);
+ builder.append(kQueryField, _query);
- if (_limit) {
- builder.append(kLimitField, _limit.get());
- }
-
- if (_skip) {
- builder.append(kSkipField, _skip.get());
- }
-
- if (_hint) {
- builder.append(kHintField, _hint.get());
- }
+ if (_limit) {
+ builder.append(kLimitField, _limit.get());
+ }
- return builder.obj();
+ if (_skip) {
+ builder.append(kSkipField, _skip.get());
}
- StatusWith<CountRequest> CountRequest::parseFromBSON(const std::string& dbname,
- const BSONObj& cmdObj) {
+ if (_hint) {
+ builder.append(kHintField, _hint.get());
+ }
- BSONElement firstElt = cmdObj.firstElement();
- const std::string coll = (firstElt.type() == BSONType::String) ? firstElt.str() : "";
+ return builder.obj();
+}
- const std::string ns = str::stream() << dbname << "." << coll;
- if (!nsIsFull(ns)) {
- return Status(ErrorCodes::BadValue, "invalid collection name");
- }
+StatusWith<CountRequest> CountRequest::parseFromBSON(const std::string& dbname,
+ const BSONObj& cmdObj) {
+ BSONElement firstElt = cmdObj.firstElement();
+ const std::string coll = (firstElt.type() == BSONType::String) ? firstElt.str() : "";
- // We don't validate that "query" is a nested object due to SERVER-15456.
- CountRequest request(ns, cmdObj.getObjectField(kQueryField));
+ const std::string ns = str::stream() << dbname << "." << coll;
+ if (!nsIsFull(ns)) {
+ return Status(ErrorCodes::BadValue, "invalid collection name");
+ }
- // Limit
- if (cmdObj[kLimitField].isNumber()) {
- long long limit = cmdObj[kLimitField].numberLong();
+ // We don't validate that "query" is a nested object due to SERVER-15456.
+ CountRequest request(ns, cmdObj.getObjectField(kQueryField));
- // For counts, limit and -limit mean the same thing.
- if (limit < 0) {
- limit = -limit;
- }
+ // Limit
+ if (cmdObj[kLimitField].isNumber()) {
+ long long limit = cmdObj[kLimitField].numberLong();
- request.setLimit(limit);
- }
- else if (cmdObj[kLimitField].ok()) {
- return Status(ErrorCodes::BadValue, "limit value is not a valid number");
+ // For counts, limit and -limit mean the same thing.
+ if (limit < 0) {
+ limit = -limit;
}
- // Skip
- if (cmdObj[kSkipField].isNumber()) {
- long long skip = cmdObj[kSkipField].numberLong();
- if (skip < 0) {
- return Status(ErrorCodes::BadValue, "skip value is negative in count query");
- }
+ request.setLimit(limit);
+ } else if (cmdObj[kLimitField].ok()) {
+ return Status(ErrorCodes::BadValue, "limit value is not a valid number");
+ }
- request.setSkip(skip);
- }
- else if (cmdObj[kSkipField].ok()) {
- return Status(ErrorCodes::BadValue, "skip value is not a valid number");
+ // Skip
+ if (cmdObj[kSkipField].isNumber()) {
+ long long skip = cmdObj[kSkipField].numberLong();
+ if (skip < 0) {
+ return Status(ErrorCodes::BadValue, "skip value is negative in count query");
}
- // Hint
- if (Object == cmdObj[kHintField].type()) {
- request.setHint(cmdObj[kHintField].Obj());
- }
- else if (String == cmdObj[kHintField].type()) {
- const std::string hint = cmdObj.getStringField(kHintField);
- request.setHint(BSON("$hint" << hint));
- }
+ request.setSkip(skip);
+ } else if (cmdObj[kSkipField].ok()) {
+ return Status(ErrorCodes::BadValue, "skip value is not a valid number");
+ }
- return request;
+ // Hint
+ if (Object == cmdObj[kHintField].type()) {
+ request.setHint(cmdObj[kHintField].Obj());
+ } else if (String == cmdObj[kHintField].type()) {
+ const std::string hint = cmdObj.getStringField(kHintField);
+ request.setHint(BSON("$hint" << hint));
}
-} // namespace mongo
+ return request;
+}
+
+} // namespace mongo