mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 09:32:32 +01:00
make $max query parameter an exclusive bound
This commit is contained in:
parent
0189992754
commit
d42d6b340c
@ -42,6 +42,7 @@ namespace mongo {
|
||||
direction_( 0 ),
|
||||
startKey_( startKey ),
|
||||
endKey_( endKey ),
|
||||
endKeyInclusive_( endKey_.isEmpty() ),
|
||||
unhelpful_( false ) {
|
||||
// full table scan case
|
||||
if ( !index_ ) {
|
||||
@ -144,7 +145,7 @@ namespace mongo {
|
||||
return findTableScan( fbs_.ns(), order_, startLoc );
|
||||
massert( "newCursor() with start location not implemented for indexed plans", startLoc.isNull() );
|
||||
//TODO This constructor should really take a const ref to the index details.
|
||||
return auto_ptr< Cursor >( new BtreeCursor( *const_cast< IndexDetails* >( index_ ), startKey_, endKey_, true, direction_ >= 0 ? 1 : -1 ) );
|
||||
return auto_ptr< Cursor >( new BtreeCursor( *const_cast< IndexDetails* >( index_ ), startKey_, endKey_, endKeyInclusive_, direction_ >= 0 ? 1 : -1 ) );
|
||||
}
|
||||
|
||||
auto_ptr< Cursor > QueryPlan::newReverseCursor() const {
|
||||
|
@ -67,6 +67,7 @@ namespace mongo {
|
||||
int direction_;
|
||||
BSONObj startKey_;
|
||||
BSONObj endKey_;
|
||||
bool endKeyInclusive_;
|
||||
bool unhelpful_;
|
||||
};
|
||||
|
||||
|
@ -562,11 +562,11 @@ namespace QueryTests {
|
||||
BSONObj hints[] = { BSONObj(), BSON( "a" << 1 << "b" << 1 ) };
|
||||
for( int i = 0; i < 2; ++i ) {
|
||||
check( 0, 0, 3, 3, 4, hints[ i ] );
|
||||
check( 1, 1, 2, 2, 4, hints[ i ] );
|
||||
check( 1, 2, 2, 2, 3, hints[ i ] );
|
||||
check( 1, 2, 2, 1, 2, hints[ i ] );
|
||||
check( 1, 1, 2, 2, 3, hints[ i ] );
|
||||
check( 1, 2, 2, 2, 2, hints[ i ] );
|
||||
check( 1, 2, 2, 1, 1, hints[ i ] );
|
||||
|
||||
auto_ptr< DBClientCursor > c = query( 1, 2, 2, 1, hints[ i ] );
|
||||
auto_ptr< DBClientCursor > c = query( 1, 2, 2, 2, hints[ i ] );
|
||||
BSONObj obj = c->next();
|
||||
ASSERT_EQUALS( 1, obj.getIntField( "a" ) );
|
||||
ASSERT_EQUALS( 2, obj.getIntField( "b" ) );
|
||||
|
@ -12,25 +12,27 @@ t.drop();
|
||||
t.ensureIndex( { a: 1, b: 1 } );
|
||||
addData();
|
||||
|
||||
assert.eq( 2, t.find().min( { a: 1, b: 2 } ).max( { a: 2, b: 1 } ).toArray().length );
|
||||
assert.eq( 1, t.find().min( { a: 1, b: 2 } ).max( { a: 2, b: 1 } ).toArray().length );
|
||||
assert.eq( 2, t.find().min( { a: 1, b: 2 } ).max( { a: 2, b: 1.5 } ).toArray().length );
|
||||
assert.eq( 2, t.find().min( { a: 1, b: 2 } ).max( { a: 2, b: 2 } ).toArray().length );
|
||||
|
||||
// just one bound
|
||||
assert.eq( 3, t.find().min( { a: 1, b: 2 } ).toArray().length );
|
||||
assert.eq( 3, t.find().max( { a: 2, b: 1 } ).toArray().length );
|
||||
assert.eq( 3, t.find().max( { a: 2, b: 1.5 } ).toArray().length );
|
||||
assert.eq( 3, t.find().min( { a: 1, b: 2 } ).hint( { a: 1, b: 1 } ).toArray().length );
|
||||
assert.eq( 3, t.find().max( { a: 2, b: 1 } ).hint( { a: 1, b: 1 } ).toArray().length );
|
||||
assert.eq( 3, t.find().max( { a: 2, b: 1.5 } ).hint( { a: 1, b: 1 } ).toArray().length );
|
||||
|
||||
t.drop();
|
||||
t.ensureIndex( { a: 1, b: -1 } );
|
||||
addData();
|
||||
assert.eq( 4, t.find().min( { a: 1, b: 2 } ).toArray().length );
|
||||
assert.eq( 4, t.find().max( { a: 2, b: 1 } ).toArray().length );
|
||||
assert.eq( 4, t.find().max( { a: 2, b: 0.5 } ).toArray().length );
|
||||
assert.eq( 1, t.find().min( { a: 2, b: 1 } ).toArray().length );
|
||||
assert.eq( 1, t.find().max( { a: 1, b: 2 } ).toArray().length );
|
||||
assert.eq( 1, t.find().max( { a: 1, b: 1.5 } ).toArray().length );
|
||||
assert.eq( 4, t.find().min( { a: 1, b: 2 } ).hint( { a: 1, b: -1 } ).toArray().length );
|
||||
assert.eq( 4, t.find().max( { a: 2, b: 1 } ).hint( { a: 1, b: -1 } ).toArray().length );
|
||||
assert.eq( 4, t.find().max( { a: 2, b: 0.5 } ).hint( { a: 1, b: -1 } ).toArray().length );
|
||||
assert.eq( 1, t.find().min( { a: 2, b: 1 } ).hint( { a: 1, b: -1 } ).toArray().length );
|
||||
assert.eq( 1, t.find().max( { a: 1, b: 2 } ).hint( { a: 1, b: -1 } ).toArray().length );
|
||||
assert.eq( 1, t.find().max( { a: 1, b: 1.5 } ).hint( { a: 1, b: -1 } ).toArray().length );
|
||||
|
||||
// hint doesn't match
|
||||
assert.throws( function() { t.find().min( { a: 1 } ).hint( { a: 1, b: -1 } ).toArray() } );
|
||||
|
Loading…
Reference in New Issue
Block a user