summaryrefslogtreecommitdiff
path: root/src/mongo/db/field_parser-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/field_parser-inl.h')
-rw-r--r--src/mongo/db/field_parser-inl.h75
1 files changed, 38 insertions, 37 deletions
diff --git a/src/mongo/db/field_parser-inl.h b/src/mongo/db/field_parser-inl.h
index b121659f59f..47cdf09c808 100644
--- a/src/mongo/db/field_parser-inl.h
+++ b/src/mongo/db/field_parser-inl.h
@@ -30,8 +30,7 @@
#include "mongo/util/mongoutils/str.h"
namespace mongo {
-
-using mongoutils::str::stream;
+namespace {
template <class T>
void _genFieldErrMsg(const BSONElement& elem,
@@ -40,10 +39,19 @@ void _genFieldErrMsg(const BSONElement& elem,
std::string* errMsg) {
if (!errMsg)
return;
- *errMsg = stream() << "wrong type for '" << field() << "' field, expected " << expected
- << ", found " << elem.toString();
+ *errMsg = str::stream() << "wrong type for '" << field() << "' field, expected " << expected
+ << ", found " << elem.toString();
+}
+
+template <typename T>
+void _clearOwnedVector(std::vector<T*>* vec) {
+ for (typename std::vector<T*>::iterator it = vec->begin(); it != vec->end(); ++it) {
+ delete (*it);
+ }
}
+} // namespace
+
template <typename T>
FieldParser::FieldState FieldParser::extract(BSONObj doc,
const BSONField<T>& field,
@@ -121,9 +129,9 @@ FieldParser::FieldState FieldParser::extract(BSONObj doc,
if (elem.type() != Object && elem.type() != Array) {
if (errMsg) {
- *errMsg = stream() << "wrong type for '" << field() << "' field, expected "
- << "vector or array"
- << ", found " << doc[field.name()].toString();
+ *errMsg = str::stream() << "wrong type for '" << field() << "' field, expected "
+ << "vector or array"
+ << ", found " << doc[field.name()].toString();
}
return FIELD_INVALID;
}
@@ -176,8 +184,8 @@ FieldParser::FieldState FieldParser::extract(BSONElement elem,
if (!FieldParser::extract(next, fieldFor, &out->at(initialSize + i), &elErrMsg)) {
if (errMsg) {
- *errMsg = stream() << "error parsing element " << i << " of field " << field()
- << causedBy(elErrMsg);
+ *errMsg = str::stream() << "error parsing element " << i << " of field "
+ << field() << causedBy(elErrMsg);
}
return FIELD_INVALID;
}
@@ -188,9 +196,9 @@ FieldParser::FieldState FieldParser::extract(BSONElement elem,
}
if (errMsg) {
- *errMsg = stream() << "wrong type for '" << field() << "' field, expected "
- << "vector array"
- << ", found " << elem.toString();
+ *errMsg = str::stream() << "wrong type for '" << field() << "' field, expected "
+ << "vector array"
+ << ", found " << elem.toString();
}
return FIELD_INVALID;
}
@@ -217,9 +225,9 @@ FieldParser::FieldState FieldParser::extract(BSONElement elem,
std::string* errMsg) {
if (elem.type() != Array) {
if (errMsg) {
- *errMsg = stream() << "wrong type for '" << field() << "' field, expected "
- << "vector array"
- << ", found " << elem.toString();
+ *errMsg = str::stream() << "wrong type for '" << field() << "' field, expected "
+ << "vector array"
+ << ", found " << elem.toString();
}
return FIELD_INVALID;
}
@@ -231,15 +239,15 @@ FieldParser::FieldState FieldParser::extract(BSONElement elem,
if (next.type() != Object) {
if (errMsg) {
- *errMsg = stream() << "wrong type for '" << field() << "' field contents, "
- << "expected object, found " << elem.type();
+ *errMsg = str::stream() << "wrong type for '" << field() << "' field contents, "
+ << "expected object, found " << elem.type();
}
return FIELD_INVALID;
}
std::unique_ptr<T> toInsert(new T);
- if (!toInsert->parseBSON(next.embeddedObject(), errMsg) || !toInsert->isValid(errMsg)) {
+ if (!toInsert->parseBSON(next.embeddedObject(), errMsg)) {
return FIELD_INVALID;
}
@@ -250,13 +258,6 @@ FieldParser::FieldState FieldParser::extract(BSONElement elem,
}
template <typename T>
-void FieldParser::clearOwnedVector(std::vector<T*>* vec) {
- for (typename std::vector<T*>::iterator it = vec->begin(); it != vec->end(); ++it) {
- delete (*it);
- }
-}
-
-template <typename T>
FieldParser::FieldState FieldParser::extract(BSONObj doc,
const BSONField<std::vector<T*>>& field,
std::vector<T*>** out,
@@ -270,9 +271,9 @@ FieldParser::FieldState FieldParser::extract(BSONObj doc,
if (elem.type() != Array) {
if (errMsg) {
- *errMsg = stream() << "wrong type for '" << field() << "' field, expected "
- << "vector array"
- << ", found " << doc[field.name()].toString();
+ *errMsg = str::stream() << "wrong type for '" << field() << "' field, expected "
+ << "vector array"
+ << ", found " << doc[field.name()].toString();
}
return FIELD_INVALID;
}
@@ -286,16 +287,16 @@ FieldParser::FieldState FieldParser::extract(BSONObj doc,
if (next.type() != Object) {
if (errMsg) {
- *errMsg = stream() << "wrong type for '" << field() << "' field contents, "
- << "expected object, found " << elem.type();
+ *errMsg = str::stream() << "wrong type for '" << field() << "' field contents, "
+ << "expected object, found " << elem.type();
}
- clearOwnedVector(tempVector.get());
+ _clearOwnedVector(tempVector.get());
return FIELD_INVALID;
}
std::unique_ptr<T> toInsert(new T);
if (!toInsert->parseBSON(next.embeddedObject(), errMsg)) {
- clearOwnedVector(tempVector.get());
+ _clearOwnedVector(tempVector.get());
return FIELD_INVALID;
}
@@ -341,8 +342,8 @@ FieldParser::FieldState FieldParser::extract(BSONElement elem,
BSONField<T> fieldFor(next.fieldName(), value);
if (!FieldParser::extract(next, fieldFor, &value, &elErrMsg)) {
if (errMsg) {
- *errMsg = stream() << "error parsing map element " << next.fieldName()
- << " of field " << field() << causedBy(elErrMsg);
+ *errMsg = str::stream() << "error parsing map element " << next.fieldName()
+ << " of field " << field() << causedBy(elErrMsg);
}
return FIELD_INVALID;
}
@@ -352,9 +353,9 @@ FieldParser::FieldState FieldParser::extract(BSONElement elem,
}
if (errMsg) {
- *errMsg = stream() << "wrong type for '" << field() << "' field, expected "
- << "vector array"
- << ", found " << elem.toString();
+ *errMsg = str::stream() << "wrong type for '" << field() << "' field, expected "
+ << "vector array"
+ << ", found " << elem.toString();
}
return FIELD_INVALID;
}