diff options
Diffstat (limited to 'jstests/core/or3.js')
-rw-r--r-- | jstests/core/or3.js | 86 |
1 files changed, 48 insertions, 38 deletions
diff --git a/jstests/core/or3.js b/jstests/core/or3.js index 1ca0ac29d80..50434965bae 100644 --- a/jstests/core/or3.js +++ b/jstests/core/or3.js @@ -4,63 +4,73 @@ t.drop(); // Include helpers for analyzing explain output. load("jstests/libs/analyze_plan.js"); -checkArrs = function( a, b ) { - assert.eq( a.length, b.length ); +checkArrs = function(a, b) { + assert.eq(a.length, b.length); aStr = []; bStr = []; - a.forEach( function( x ) { aStr.push( tojson( x ) ); } ); - b.forEach( function( x ) { bStr.push( tojson( x ) ); } ); - for ( i = 0; i < aStr.length; ++i ) { - assert.neq( -1, bStr.indexOf( aStr[ i ] ) ); + a.forEach(function(x) { + aStr.push(tojson(x)); + }); + b.forEach(function(x) { + bStr.push(tojson(x)); + }); + for (i = 0; i < aStr.length; ++i) { + assert.neq(-1, bStr.indexOf(aStr[i])); } }; -doTest = function( index ) { - if ( index == null ) { +doTest = function(index) { + if (index == null) { index = true; } - - t.save( {_id:0,x:0,a:1} ); - t.save( {_id:1,x:0,a:2} ); - t.save( {_id:2,x:0,b:1} ); - t.save( {_id:3,x:0,b:2} ); - t.save( {_id:4,x:1,a:1,b:1} ); - t.save( {_id:5,x:1,a:1,b:2} ); - t.save( {_id:6,x:1,a:2,b:1} ); - t.save( {_id:7,x:1,a:2,b:2} ); - - assert.throws( function() { t.find( { x:0,$nor:"a" } ).toArray(); } ); - assert.throws( function() { t.find( { x:0,$nor:[] } ).toArray(); } ); - assert.throws( function() { t.find( { x:0,$nor:[ "a" ] } ).toArray(); } ); - an1 = t.find( { $nor: [ { a : 1 } ] } ).toArray(); - checkArrs( t.find( {a:{$ne:1}} ).toArray(), an1 ); - - an1bn2 = t.find( { x:1, $nor: [ { a : 1 }, { b : 2 } ] } ).toArray(); - checkArrs( [ { _id:6, x:1, a:2, b:1 } ], an1bn2 ); - checkArrs( t.find( { x:1, a:{$ne:1}, b:{$ne:2} } ).toArray(), an1bn2 ); - if ( index ) { - var explain = t.find( { x:1, $nor: [ { a : 1 }, { b : 2 } ] } ).explain(); - assert( isIxscan(explain.queryPlanner.winningPlan) ); + t.save({_id: 0, x: 0, a: 1}); + t.save({_id: 1, x: 0, a: 2}); + t.save({_id: 2, x: 0, b: 1}); + t.save({_id: 3, x: 0, b: 2}); + t.save({_id: 4, x: 1, a: 1, b: 1}); + t.save({_id: 5, x: 1, a: 1, b: 2}); + t.save({_id: 6, x: 1, a: 2, b: 1}); + t.save({_id: 7, x: 1, a: 2, b: 2}); + + assert.throws(function() { + t.find({x: 0, $nor: "a"}).toArray(); + }); + assert.throws(function() { + t.find({x: 0, $nor: []}).toArray(); + }); + assert.throws(function() { + t.find({x: 0, $nor: ["a"]}).toArray(); + }); + + an1 = t.find({$nor: [{a: 1}]}).toArray(); + checkArrs(t.find({a: {$ne: 1}}).toArray(), an1); + + an1bn2 = t.find({x: 1, $nor: [{a: 1}, {b: 2}]}).toArray(); + checkArrs([{_id: 6, x: 1, a: 2, b: 1}], an1bn2); + checkArrs(t.find({x: 1, a: {$ne: 1}, b: {$ne: 2}}).toArray(), an1bn2); + if (index) { + var explain = t.find({x: 1, $nor: [{a: 1}, {b: 2}]}).explain(); + assert(isIxscan(explain.queryPlanner.winningPlan)); } - - an1b2 = t.find( { $nor: [ { a : 1 } ], $or: [ { b : 2 } ] } ).toArray(); - checkArrs( t.find( {a:{$ne:1},b:2} ).toArray(), an1b2 ); + + an1b2 = t.find({$nor: [{a: 1}], $or: [{b: 2}]}).toArray(); + checkArrs(t.find({a: {$ne: 1}, b: 2}).toArray(), an1b2); }; -doTest( false ); +doTest(false); -t.ensureIndex( { x:1 } ); +t.ensureIndex({x: 1}); doTest(); t.drop(); -t.ensureIndex( { x:1,a:1 } ); +t.ensureIndex({x: 1, a: 1}); doTest(); t.drop(); -t.ensureIndex( {x:1,b:1} ); +t.ensureIndex({x: 1, b: 1}); doTest(); t.drop(); -t.ensureIndex( {x:1,a:1,b:1} ); +t.ensureIndex({x: 1, a: 1, b: 1}); doTest(); |