diff options
Diffstat (limited to 'src/mongo/db/query/count_request.cpp')
-rw-r--r-- | src/mongo/db/query/count_request.cpp | 134 |
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 |