diff options
author | Greg Studer <greg@10gen.com> | 2014-06-05 14:57:34 -0400 |
---|---|---|
committer | Greg Studer <greg@10gen.com> | 2014-06-10 17:06:53 -0400 |
commit | 6537dc777512d093a489cb1db99e8db8cf50b914 (patch) | |
tree | c1513b2afeb44a500d57a8316e3b65139b56f7f4 /src/mongo/db/field_parser.cpp | |
parent | e191494d5092181e222c022fe44741951af91a2f (diff) | |
download | mongo-6537dc777512d093a489cb1db99e8db8cf50b914.tar.gz |
SERVER-5800 convert 2d predicate queries into covered index scans
Diffstat (limited to 'src/mongo/db/field_parser.cpp')
-rw-r--r-- | src/mongo/db/field_parser.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/mongo/db/field_parser.cpp b/src/mongo/db/field_parser.cpp index 80f04ab4e6e..40c8c9664eb 100644 --- a/src/mongo/db/field_parser.cpp +++ b/src/mongo/db/field_parser.cpp @@ -378,6 +378,67 @@ namespace mongo { return FIELD_INVALID; } + FieldParser::FieldState FieldParser::extract( BSONObj doc, + const BSONField<double>& field, + double* out, + string* errMsg ) { + return extract( doc[field.name()], field, out, errMsg ); + } + + FieldParser::FieldState FieldParser::extract( BSONElement elem, + const BSONField<double>& field, + double* out, + string* errMsg ) + { + if (elem.eoo()) { + if (field.hasDefault()) { + *out = field.getDefault(); + return FIELD_DEFAULT; + } + else { + return FIELD_NONE; + } + } + + if (elem.type() == NumberDouble) { + *out = elem.numberDouble(); + return FIELD_SET; + } + + _genFieldErrMsg(elem, field, "double", errMsg); + return FIELD_INVALID; + } + + FieldParser::FieldState FieldParser::extractNumber( BSONObj doc, + const BSONField<double>& field, + double* out, + string* errMsg ) { + return extractNumber( doc[field.name()], field, out, errMsg ); + } + + FieldParser::FieldState FieldParser::extractNumber( BSONElement elem, + const BSONField<double>& field, + double* out, + string* errMsg ) { + if (elem.eoo()) { + if (field.hasDefault()) { + *out = field.getDefault(); + return FIELD_DEFAULT; + } + else { + return FIELD_NONE; + } + } + + if (elem.isNumber()) { + *out = elem.numberDouble(); + return FIELD_SET; + } + + _genFieldErrMsg(elem, field, "number", errMsg); + return FIELD_INVALID; + } + FieldParser::FieldState FieldParser::extractID( BSONObj doc, const BSONField<BSONObj>& field, BSONObj* out, |