diff options
Diffstat (limited to 'jstests/aggregation/bugs/server12015.js')
-rw-r--r-- | jstests/aggregation/bugs/server12015.js | 124 |
1 files changed, 63 insertions, 61 deletions
diff --git a/jstests/aggregation/bugs/server12015.js b/jstests/aggregation/bugs/server12015.js index 1b59a59545c..2c2b34d126c 100644 --- a/jstests/aggregation/bugs/server12015.js +++ b/jstests/aggregation/bugs/server12015.js @@ -9,77 +9,79 @@ load("jstests/aggregation/extras/utils.js"); // For orderedArrayEq. (function() { - "use strict"; - const coll = db.server12015; - coll.drop(); - const indexSpec = {a: 1, b: 1}; +"use strict"; +const coll = db.server12015; +coll.drop(); +const indexSpec = { + a: 1, + b: 1 +}; - assert.writeOK(coll.insert({_id: 0, a: 0, b: 0})); - assert.writeOK(coll.insert({_id: 1, a: 0, b: 1})); - assert.writeOK(coll.insert({_id: 2, a: 1, b: 0})); - assert.writeOK(coll.insert({_id: 3, a: 1, b: 1})); +assert.writeOK(coll.insert({_id: 0, a: 0, b: 0})); +assert.writeOK(coll.insert({_id: 1, a: 0, b: 1})); +assert.writeOK(coll.insert({_id: 2, a: 1, b: 0})); +assert.writeOK(coll.insert({_id: 3, a: 1, b: 1})); - /** - * Helper to test that for a given pipeline, the same results are returned whether or not an - * index is present. If 'ignoreSortOrder' is present, test for result parity without assuming - * the order of results. - */ - function assertResultsMatch(pipeline, ignoreSortOrder) { - // Add a match stage to ensure index scans are considered for planning (workaround for - // SERVER-20066). - pipeline = [{$match: {a: {$gte: 0}}}].concat(pipeline); +/** + * Helper to test that for a given pipeline, the same results are returned whether or not an + * index is present. If 'ignoreSortOrder' is present, test for result parity without assuming + * the order of results. + */ +function assertResultsMatch(pipeline, ignoreSortOrder) { + // Add a match stage to ensure index scans are considered for planning (workaround for + // SERVER-20066). + pipeline = [{$match: {a: {$gte: 0}}}].concat(pipeline); - // Once with an index. - assert.commandWorked(coll.ensureIndex(indexSpec)); - var resultsWithIndex = coll.aggregate(pipeline).toArray(); + // Once with an index. + assert.commandWorked(coll.ensureIndex(indexSpec)); + var resultsWithIndex = coll.aggregate(pipeline).toArray(); - // Again without an index. - assert.commandWorked(coll.dropIndex(indexSpec)); - var resultsWithoutIndex = coll.aggregate(pipeline).toArray(); + // Again without an index. + assert.commandWorked(coll.dropIndex(indexSpec)); + var resultsWithoutIndex = coll.aggregate(pipeline).toArray(); - if (ignoreSortOrder) { - assert(arrayEq(resultsWithIndex, resultsWithoutIndex), tojson({ - resultsWithIndex: resultsWithIndex, - resultsWithoutIndex: resultsWithoutIndex - })); - } else { - assert.eq(resultsWithIndex, resultsWithoutIndex); - } + if (ignoreSortOrder) { + assert( + arrayEq(resultsWithIndex, resultsWithoutIndex), + tojson({resultsWithIndex: resultsWithIndex, resultsWithoutIndex: resultsWithoutIndex})); + } else { + assert.eq(resultsWithIndex, resultsWithoutIndex); } +} - // Uncovered $project, no $sort. - const ignoreSortOrder = true; - assertResultsMatch([{$project: {_id: 1, a: 1, b: 1}}], ignoreSortOrder); +// Uncovered $project, no $sort. +const ignoreSortOrder = true; +assertResultsMatch([{$project: {_id: 1, a: 1, b: 1}}], ignoreSortOrder); - // Covered $project, no $sort. - assertResultsMatch([{$project: {_id: 0, a: 1}}], ignoreSortOrder); - assertResultsMatch([{$project: {_id: 0, a: 1, b: 1}}], ignoreSortOrder); - assertResultsMatch([{$project: {_id: 0, a: 1, b: 1, c: {$literal: 1}}}], ignoreSortOrder); - assertResultsMatch([{$project: {_id: 0, a: 1, b: 1}}, {$project: {a: 1}}], ignoreSortOrder); - assertResultsMatch([{$project: {_id: 0, a: 1, b: 1}}, {$group: {_id: null, a: {$sum: "$a"}}}], - ignoreSortOrder); +// Covered $project, no $sort. +assertResultsMatch([{$project: {_id: 0, a: 1}}], ignoreSortOrder); +assertResultsMatch([{$project: {_id: 0, a: 1, b: 1}}], ignoreSortOrder); +assertResultsMatch([{$project: {_id: 0, a: 1, b: 1, c: {$literal: 1}}}], ignoreSortOrder); +assertResultsMatch([{$project: {_id: 0, a: 1, b: 1}}, {$project: {a: 1}}], ignoreSortOrder); +assertResultsMatch([{$project: {_id: 0, a: 1, b: 1}}, {$group: {_id: null, a: {$sum: "$a"}}}], + ignoreSortOrder); - // Non-blocking $sort, uncovered $project. - assertResultsMatch([{$sort: {a: -1, b: -1}}, {$project: {_id: 1, a: 1, b: 1}}]); - assertResultsMatch([{$sort: {a: 1, b: 1}}, {$project: {_id: 1, a: 1, b: 1}}]); - assertResultsMatch( - [{$sort: {a: 1, b: 1}}, {$group: {_id: "$_id", arr: {$push: "$a"}, sum: {$sum: "$b"}}}], - ignoreSortOrder); +// Non-blocking $sort, uncovered $project. +assertResultsMatch([{$sort: {a: -1, b: -1}}, {$project: {_id: 1, a: 1, b: 1}}]); +assertResultsMatch([{$sort: {a: 1, b: 1}}, {$project: {_id: 1, a: 1, b: 1}}]); +assertResultsMatch( + [{$sort: {a: 1, b: 1}}, {$group: {_id: "$_id", arr: {$push: "$a"}, sum: {$sum: "$b"}}}], + ignoreSortOrder); - // Non-blocking $sort, covered $project. - assertResultsMatch([{$sort: {a: -1, b: -1}}, {$project: {_id: 0, a: 1, b: 1}}]); - assertResultsMatch([{$sort: {a: 1, b: 1}}, {$project: {_id: 0, a: 1, b: 1}}]); - assertResultsMatch([{$sort: {a: 1, b: 1}}, {$group: {_id: "$b", arr: {$push: "$a"}}}], - ignoreSortOrder); +// Non-blocking $sort, covered $project. +assertResultsMatch([{$sort: {a: -1, b: -1}}, {$project: {_id: 0, a: 1, b: 1}}]); +assertResultsMatch([{$sort: {a: 1, b: 1}}, {$project: {_id: 0, a: 1, b: 1}}]); +assertResultsMatch([{$sort: {a: 1, b: 1}}, {$group: {_id: "$b", arr: {$push: "$a"}}}], + ignoreSortOrder); - // Blocking $sort, uncovered $project. - assertResultsMatch([{$sort: {b: 1, a: -1}}, {$project: {_id: 1, a: 1, b: 1}}]); - assertResultsMatch( - [{$sort: {b: 1, a: -1}}, {$group: {_id: "$_id", arr: {$push: "$a"}, sum: {$sum: "$b"}}}], - ignoreSortOrder); +// Blocking $sort, uncovered $project. +assertResultsMatch([{$sort: {b: 1, a: -1}}, {$project: {_id: 1, a: 1, b: 1}}]); +assertResultsMatch( + [{$sort: {b: 1, a: -1}}, {$group: {_id: "$_id", arr: {$push: "$a"}, sum: {$sum: "$b"}}}], + ignoreSortOrder); - // Blocking $sort, covered $project. - assertResultsMatch([{$sort: {b: 1, a: -1}}, {$project: {_id: 0, a: 1, b: 1}}]); - assertResultsMatch([{$sort: {b: 1, a: -1}}, {$group: {_id: "$b", arr: {$push: "$a"}}}], - ignoreSortOrder); +// Blocking $sort, covered $project. +assertResultsMatch([{$sort: {b: 1, a: -1}}, {$project: {_id: 0, a: 1, b: 1}}]); +assertResultsMatch([{$sort: {b: 1, a: -1}}, {$group: {_id: "$b", arr: {$push: "$a"}}}], + ignoreSortOrder); }()); |