summaryrefslogtreecommitdiff
path: root/src/mongo/db/field_parser.cpp
diff options
context:
space:
mode:
authorGreg Studer <greg@10gen.com>2014-06-05 14:57:34 -0400
committerGreg Studer <greg@10gen.com>2014-06-10 17:06:53 -0400
commit6537dc777512d093a489cb1db99e8db8cf50b914 (patch)
treec1513b2afeb44a500d57a8316e3b65139b56f7f4 /src/mongo/db/field_parser.cpp
parente191494d5092181e222c022fe44741951af91a2f (diff)
downloadmongo-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.cpp61
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,