diff options
Diffstat (limited to 'src/mongo/db/field_parser-inl.h')
-rw-r--r-- | src/mongo/db/field_parser-inl.h | 75 |
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; } |