diff options
Diffstat (limited to 'db/queryutil.cpp')
-rw-r--r-- | db/queryutil.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/db/queryutil.cpp b/db/queryutil.cpp index 717eac8..47f89ad 100644 --- a/db/queryutil.cpp +++ b/db/queryutil.cpp @@ -1007,6 +1007,8 @@ namespace mongo { qp._fieldTypes[ i->first ] = QueryPattern::UpperBound; else if ( lower ) qp._fieldTypes[ i->first ] = QueryPattern::LowerBound; + else + qp._fieldTypes[ i->first ] = QueryPattern::ConstraintPresent; } } qp.setSort( sort ); @@ -1019,13 +1021,13 @@ namespace mongo { BoundBuilders builders; builders.push_back( make_pair( shared_ptr<BSONObjBuilder>( new BSONObjBuilder() ), shared_ptr<BSONObjBuilder>( new BSONObjBuilder() ) ) ); BSONObjIterator i( keyPattern ); - bool ineq = false; // until ineq is true, we are just dealing with equality and $in bounds + bool equalityOnly = true; // until equalityOnly is false, we are just dealing with equality (no range or $in querys). while( i.more() ) { BSONElement e = i.next(); const FieldRange &fr = range( e.fieldName() ); int number = (int) e.number(); // returns 0.0 if not numeric bool forward = ( ( number >= 0 ? 1 : -1 ) * ( direction >= 0 ? 1 : -1 ) > 0 ); - if ( !ineq ) { + if ( equalityOnly ) { if ( fr.equality() ) { for( BoundBuilders::const_iterator j = builders.begin(); j != builders.end(); ++j ) { j->first->appendAs( fr.min(), "" ); @@ -1033,9 +1035,8 @@ namespace mongo { } } else { - if ( !fr.inQuery() ) { - ineq = true; - } + equalityOnly = false; + BoundBuilders newBuilders; const vector<FieldInterval> &intervals = fr.intervals(); for( BoundBuilders::const_iterator i = builders.begin(); i != builders.end(); ++i ) { |