summaryrefslogtreecommitdiff
path: root/src/mongo/bson/util/bson_extract.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/bson/util/bson_extract.cpp')
-rw-r--r--src/mongo/bson/util/bson_extract.cpp268
1 files changed, 127 insertions, 141 deletions
diff --git a/src/mongo/bson/util/bson_extract.cpp b/src/mongo/bson/util/bson_extract.cpp
index ef8f5110568..d5b5b83e6da 100644
--- a/src/mongo/bson/util/bson_extract.cpp
+++ b/src/mongo/bson/util/bson_extract.cpp
@@ -32,163 +32,149 @@
namespace mongo {
- Status bsonExtractField(const BSONObj& object,
- StringData fieldName,
- BSONElement* outElement) {
- BSONElement element = object.getField(fieldName);
- if (element.eoo())
- return Status(ErrorCodes::NoSuchKey,
- mongoutils::str::stream() << "Missing expected field \"" <<
- fieldName.toString() << "\"");
- *outElement = element;
- return Status::OK();
- }
+Status bsonExtractField(const BSONObj& object, StringData fieldName, BSONElement* outElement) {
+ BSONElement element = object.getField(fieldName);
+ if (element.eoo())
+ return Status(ErrorCodes::NoSuchKey,
+ mongoutils::str::stream() << "Missing expected field \""
+ << fieldName.toString() << "\"");
+ *outElement = element;
+ return Status::OK();
+}
- Status bsonExtractTypedField(const BSONObj& object,
- StringData fieldName,
- BSONType type,
- BSONElement* outElement) {
- Status status = bsonExtractField(object, fieldName, outElement);
- if (!status.isOK())
- return status;
- if (type != outElement->type()) {
- return Status(ErrorCodes::TypeMismatch,
- mongoutils::str::stream() << "\"" << fieldName <<
- "\" had the wrong type. Expected " << typeName(type) <<
- ", found " << typeName(outElement->type()));
- }
- return Status::OK();
+Status bsonExtractTypedField(const BSONObj& object,
+ StringData fieldName,
+ BSONType type,
+ BSONElement* outElement) {
+ Status status = bsonExtractField(object, fieldName, outElement);
+ if (!status.isOK())
+ return status;
+ if (type != outElement->type()) {
+ return Status(ErrorCodes::TypeMismatch,
+ mongoutils::str::stream()
+ << "\"" << fieldName << "\" had the wrong type. Expected "
+ << typeName(type) << ", found " << typeName(outElement->type()));
}
+ return Status::OK();
+}
- Status bsonExtractBooleanField(const BSONObj& object,
- StringData fieldName,
- bool* out) {
- BSONElement element;
- Status status = bsonExtractTypedField(object, fieldName, Bool, &element);
- if (!status.isOK())
- return status;
- *out = element.boolean();
+Status bsonExtractBooleanField(const BSONObj& object, StringData fieldName, bool* out) {
+ BSONElement element;
+ Status status = bsonExtractTypedField(object, fieldName, Bool, &element);
+ if (!status.isOK())
+ return status;
+ *out = element.boolean();
+ return Status::OK();
+}
+
+Status bsonExtractBooleanFieldWithDefault(const BSONObj& object,
+ StringData fieldName,
+ bool defaultValue,
+ bool* out) {
+ BSONElement value;
+ Status status = bsonExtractField(object, fieldName, &value);
+ if (status == ErrorCodes::NoSuchKey) {
+ *out = defaultValue;
+ return Status::OK();
+ } else if (!status.isOK()) {
+ return status;
+ } else if (!value.isNumber() && !value.isBoolean()) {
+ return Status(ErrorCodes::TypeMismatch,
+ mongoutils::str::stream() << "Expected boolean or number type for field \""
+ << fieldName << "\", found "
+ << typeName(value.type()));
+ } else {
+ *out = value.trueValue();
return Status::OK();
}
+}
- Status bsonExtractBooleanFieldWithDefault(const BSONObj& object,
- StringData fieldName,
- bool defaultValue,
- bool* out) {
- BSONElement value;
- Status status = bsonExtractField(object, fieldName, &value);
- if (status == ErrorCodes::NoSuchKey) {
- *out = defaultValue;
- return Status::OK();
- }
- else if (!status.isOK()) {
- return status;
- }
- else if (!value.isNumber() && !value.isBoolean()) {
- return Status(ErrorCodes::TypeMismatch, mongoutils::str::stream() <<
- "Expected boolean or number type for field \"" << fieldName <<
- "\", found " << typeName(value.type()));
- }
- else {
- *out = value.trueValue();
- return Status::OK();
- }
- }
+Status bsonExtractStringField(const BSONObj& object, StringData fieldName, std::string* out) {
+ BSONElement element;
+ Status status = bsonExtractTypedField(object, fieldName, String, &element);
+ if (!status.isOK())
+ return status;
+ *out = element.str();
+ return Status::OK();
+}
- Status bsonExtractStringField(const BSONObj& object,
- StringData fieldName,
- std::string* out) {
- BSONElement element;
- Status status = bsonExtractTypedField(object, fieldName, String, &element);
- if (!status.isOK())
- return status;
- *out = element.str();
- return Status::OK();
- }
+Status bsonExtractTimestampField(const BSONObj& object, StringData fieldName, Timestamp* out) {
+ BSONElement element;
+ Status status = bsonExtractTypedField(object, fieldName, bsonTimestamp, &element);
+ if (!status.isOK())
+ return status;
+ *out = element.timestamp();
+ return Status::OK();
+}
- Status bsonExtractTimestampField(const BSONObj& object,
- StringData fieldName,
- Timestamp* out) {
- BSONElement element;
- Status status = bsonExtractTypedField(object, fieldName, bsonTimestamp, &element);
- if (!status.isOK())
- return status;
- *out = element.timestamp();
- return Status::OK();
- }
+Status bsonExtractOIDField(const BSONObj& object, StringData fieldName, OID* out) {
+ BSONElement element;
+ Status status = bsonExtractTypedField(object, fieldName, jstOID, &element);
+ if (!status.isOK())
+ return status;
+ *out = element.OID();
+ return Status::OK();
+}
- Status bsonExtractOIDField(const BSONObj& object,
- StringData fieldName,
- OID* out) {
- BSONElement element;
- Status status = bsonExtractTypedField(object, fieldName, jstOID, &element);
- if (!status.isOK())
- return status;
- *out = element.OID();
- return Status::OK();
+Status bsonExtractOIDFieldWithDefault(const BSONObj& object,
+ StringData fieldName,
+ const OID& defaultValue,
+ OID* out) {
+ Status status = bsonExtractOIDField(object, fieldName, out);
+ if (status == ErrorCodes::NoSuchKey) {
+ *out = defaultValue;
+ } else if (!status.isOK()) {
+ return status;
}
+ return Status::OK();
+}
- Status bsonExtractOIDFieldWithDefault(const BSONObj& object,
- StringData fieldName,
- const OID& defaultValue,
- OID* out) {
- Status status = bsonExtractOIDField(object, fieldName, out);
- if (status == ErrorCodes::NoSuchKey) {
- *out = defaultValue;
- }
- else if (!status.isOK()) {
- return status;
- }
- return Status::OK();
+Status bsonExtractStringFieldWithDefault(const BSONObj& object,
+ StringData fieldName,
+ StringData defaultValue,
+ std::string* out) {
+ Status status = bsonExtractStringField(object, fieldName, out);
+ if (status == ErrorCodes::NoSuchKey) {
+ *out = defaultValue.toString();
+ } else if (!status.isOK()) {
+ return status;
}
+ return Status::OK();
+}
- Status bsonExtractStringFieldWithDefault(const BSONObj& object,
- StringData fieldName,
- StringData defaultValue,
- std::string* out) {
- Status status = bsonExtractStringField(object, fieldName, out);
- if (status == ErrorCodes::NoSuchKey) {
- *out = defaultValue.toString();
- }
- else if (!status.isOK()) {
- return status;
- }
- return Status::OK();
+Status bsonExtractIntegerField(const BSONObj& object, StringData fieldName, long long* out) {
+ BSONElement value;
+ Status status = bsonExtractField(object, fieldName, &value);
+ if (!status.isOK())
+ return status;
+ if (!value.isNumber()) {
+ return Status(ErrorCodes::TypeMismatch,
+ mongoutils::str::stream() << "Expected field \"" << fieldName
+ << "\" to have numeric type, but found "
+ << typeName(value.type()));
}
-
- Status bsonExtractIntegerField(const BSONObj& object,
- StringData fieldName,
- long long* out) {
- BSONElement value;
- Status status = bsonExtractField(object, fieldName, &value);
- if (!status.isOK())
- return status;
- if (!value.isNumber()) {
- return Status(ErrorCodes::TypeMismatch, mongoutils::str::stream() <<
- "Expected field \"" << fieldName <<
- "\" to have numeric type, but found " << typeName(value.type()));
- }
- long long result = value.safeNumberLong();
- if (result != value.numberDouble()) {
- return Status(ErrorCodes::BadValue, mongoutils::str::stream() <<
- "Expected field \"" << fieldName << "\" to have a value "
- "exactly representable as a 64-bit integer, but found " <<
- value);
- }
- *out = result;
- return Status::OK();
+ long long result = value.safeNumberLong();
+ if (result != value.numberDouble()) {
+ return Status(ErrorCodes::BadValue,
+ mongoutils::str::stream()
+ << "Expected field \"" << fieldName
+ << "\" to have a value "
+ "exactly representable as a 64-bit integer, but found " << value);
}
+ *out = result;
+ return Status::OK();
+}
- Status bsonExtractIntegerFieldWithDefault(const BSONObj& object,
- StringData fieldName,
- long long defaultValue,
- long long* out) {
- Status status = bsonExtractIntegerField(object, fieldName, out);
- if (status == ErrorCodes::NoSuchKey) {
- *out = defaultValue;
- status = Status::OK();
- }
- return status;
+Status bsonExtractIntegerFieldWithDefault(const BSONObj& object,
+ StringData fieldName,
+ long long defaultValue,
+ long long* out) {
+ Status status = bsonExtractIntegerField(object, fieldName, out);
+ if (status == ErrorCodes::NoSuchKey) {
+ *out = defaultValue;
+ status = Status::OK();
}
+ return status;
+}
} // namespace mongo