diff options
Diffstat (limited to 'jstests/stages_ixscan.js')
-rw-r--r-- | jstests/stages_ixscan.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/jstests/stages_ixscan.js b/jstests/stages_ixscan.js new file mode 100644 index 00000000000..a7cd6bedc3a --- /dev/null +++ b/jstests/stages_ixscan.js @@ -0,0 +1,76 @@ +// Test basic query stage index scan functionality. +t = db.stages_ixscan; +t.drop(); + +var N = 50; +for (var i = 0; i < N; ++i) { + t.insert({foo: i, bar: N - i, baz: i}); +} + +t.ensureIndex({foo: 1}) +t.ensureIndex({foo: 1, baz: 1}); + +// foo <= 20 +ixscan1 = {ixscan: {args:{name: "stages_ixscan", keyPattern:{foo: 1}, + startKey: {"": 20}, + endKey: {}, endKeyInclusive: true, + direction: -1}}}; +res = db.runCommand({stageDebug: ixscan1}); +assert(!db.getLastError()); +assert.eq(res.ok, 1); +assert.eq(res.results.length, 21); + +// 20 <= foo < 30 +ixscan1 = {ixscan: {args:{name: "stages_ixscan", keyPattern:{foo: 1}, + startKey: {"": 20}, + endKey: {"" : 30}, endKeyInclusive: false, + direction: 1}}}; +res = db.runCommand({stageDebug: ixscan1}); +assert(!db.getLastError()); +assert.eq(res.ok, 1); +assert.eq(res.results.length, 10); + +// 20 <= foo <= 30 +ixscan1 = {ixscan: {args:{name: "stages_ixscan", keyPattern:{foo: 1}, + startKey: {"": 20}, + endKey: {"" : 30}, endKeyInclusive: true, + direction: 1}}}; +res = db.runCommand({stageDebug: ixscan1}); +assert(!db.getLastError()); +assert.eq(res.ok, 1); +assert.eq(res.results.length, 11); + +// 20 <= foo <= 30 +// foo == 25 +ixscan1 = {ixscan: {args:{name: "stages_ixscan", keyPattern:{foo: 1}, + startKey: {"": 20}, + endKey: {"" : 30}, endKeyInclusive: true, + direction: 1}, + filter: {foo: 25}}}; +res = db.runCommand({stageDebug: ixscan1}); +assert(!db.getLastError()); +assert.eq(res.ok, 1); +assert.eq(res.results.length, 1); + +// 20 <= foo <= 30 +// baz == 25 (in index so we can match against it.) +ixscan1 = {ixscan: {args:{name: "stages_ixscan", keyPattern:{foo:1, baz: 1}, + startKey: {"": 20, "":MinKey}, + endKey: {"" : 30, "":MaxKey}, endKeyInclusive: true, + direction: 1}, + filter: {baz: 25}}}; +res = db.runCommand({stageDebug: ixscan1}); +assert(!db.getLastError()); +assert.eq(res.ok, 1); +assert.eq(res.results.length, 1); + +// 20 <= foo <= 30 +// bar == 25 (not covered, should error.) +ixscan1 = {ixscan: {args:{name: "stages_ixscan", keyPattern:{foo:1, baz: 1}, + startKey: {"": 20, "":MinKey}, + endKey: {"" : 30, "":MaxKey}, endKeyInclusive: true, + direction: 1}, + filter: {bar: 25}}}; +res = db.runCommand({stageDebug: ixscan1}); +assert(db.getLastError()); +assert.eq(res.ok, 0); |