diff options
author | Drew Paroski <drew.paroski@mongodb.com> | 2023-04-18 03:26:55 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-04-26 03:09:57 +0000 |
commit | b3b06e3d80944b177dbde83e1f30c785764c4e3d (patch) | |
tree | 1feb7b078df13226a3659947aca704e3268df689 /jstests/core | |
parent | cd29dad92501a77a4f5d36a63dfbbd66e4299ee9 (diff) | |
download | mongo-b3b06e3d80944b177dbde83e1f30c785764c4e3d.tar.gz |
SERVER-76510 Make makeBsonObj() preserve field order
Diffstat (limited to 'jstests/core')
-rw-r--r-- | jstests/core/columnstore/columnstore_index_correctness.js | 215 | ||||
-rw-r--r-- | jstests/core/columnstore/columnstore_large_array_index_correctness.js | 28 |
2 files changed, 122 insertions, 121 deletions
diff --git a/jstests/core/columnstore/columnstore_index_correctness.js b/jstests/core/columnstore/columnstore_index_correctness.js index 247e7888399..de3ec4ec1ec 100644 --- a/jstests/core/columnstore/columnstore_index_correctness.js +++ b/jstests/core/columnstore/columnstore_index_correctness.js @@ -181,102 +181,102 @@ const coll = db.columnstore_index_correctness; // Multiple tests in this file use the same dataset. Intentionally not using _id as the unique // identifier, to avoid getting IDHACK plans when we query by it. const docs = [ - {num: 0}, - {num: 1, a: null}, - {num: 2, a: "scalar"}, - {num: 3, a: {}}, - {num: 4, a: {x: 1, b: "scalar"}}, - {num: 5, a: {b: {}}}, - {num: 6, a: {x: 1, b: {}}}, - {num: 7, a: {x: 1, b: {x: 1}}}, - {num: 8, a: {b: {c: "scalar"}}}, - {num: 9, a: {b: {c: null}}}, - {num: 10, a: {b: {c: [[1, 2], [{}], 2]}}}, - {num: 11, a: {x: 1, b: {x: 1, c: ["scalar"]}}}, - {num: 12, a: {x: 1, b: {c: {x: 1}}}}, - {num: 13, a: {b: []}}, - {num: 14, a: {b: [null]}}, - {num: 15, a: {b: ["scalar"]}}, - {num: 16, a: {b: [[]]}}, - {num: 17, a: {b: [1, {}, 2]}}, - {num: 18, a: {b: [[1, 2], [{}], 2]}}, - {num: 19, a: {x: 1, b: [[1, 2], [{}], 2]}}, - {num: 20, a: {b: [{c: "scalar"}]}}, - {num: 21, a: {b: [{c: "scalar"}, {c: "scalar2"}]}}, - {num: 22, a: {b: [{c: [[1, 2], [{}], 2]}]}}, - {num: 23, a: {b: [1, {c: "scalar"}, 2]}}, - {num: 24, a: {b: [1, {c: [[1, 2], [{}], 2]}, 2]}}, - {num: 25, a: {x: 1, b: [1, {c: [[1, 2], [{}], 2]}, 2]}}, - {num: 26, a: {b: [[1, 2], [{c: "scalar"}], 2]}}, - {num: 27, a: {b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}}, - {num: 28, a: {x: 1, b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}}, - {num: 29, a: []}, - {num: 30, a: [null]}, - {num: 31, a: ["scalar"]}, - {num: 32, a: [[]]}, - {num: 33, a: [{}]}, - {num: 34, a: [1, {}, 2]}, - {num: 35, a: [[1, 2], [{}], 2]}, - {num: 36, a: [{b: "scalar"}]}, - {num: 37, a: [{b: null}]}, - {num: 38, a: [1, {b: "scalar"}, 2]}, - {num: 39, a: [1, {b: []}, 2]}, - {num: 40, a: [1, {b: [null]}, 2]}, - {num: 41, a: [1, {b: ["scalar"]}, 2]}, - {num: 42, a: [1, {b: [[]]}, 2]}, - {num: 43, a: [{b: []}]}, - {num: 44, a: [{b: ["scalar"]}]}, - {num: 45, a: [{b: [[]]}]}, - {num: 46, a: [{b: {}}]}, - {num: 47, a: [{b: {c: "scalar"}}]}, - {num: 48, a: [{b: {c: [[1, 2], [{}], 2]}}]}, - {num: 49, a: [{b: {x: 1}}]}, - {num: 50, a: [{b: {x: 1, c: "scalar"}}]}, - {num: 51, a: [{b: [{c: "scalar"}]}]}, - {num: 52, a: [{b: [{c: ["scalar"]}]}]}, - {num: 53, a: [{b: [1, {c: ["scalar"]}, 2]}]}, - {num: 54, a: [{b: [{}]}]}, - {num: 55, a: [{b: [[1, 2], [{}], 2]}]}, - {num: 56, a: [{b: [[1, 2], [{c: "scalar"}], 2]}]}, - {num: 57, a: [{b: [[1, 2], [{c: ["scalar"]}], 2]}]}, - {num: 58, a: [1, {b: {}}, 2]}, - {num: 59, a: [1, {b: {c: "scalar"}}, 2]}, - {num: 60, a: [1, {b: {c: {x: 1}}}, 2]}, - {num: 61, a: [1, {b: {c: [1, {}, 2]}}, 2]}, - {num: 62, a: [1, {b: {x: 1}}, 2]}, - {num: 63, a: [1, {b: {x: 1, c: "scalar"}}, 2]}, - {num: 64, a: [1, {b: {x: 1, c: [[]]}}, 2]}, - {num: 65, a: [1, {b: {x: 1, c: [1, {}, 2]}}, 2]}, - {num: 66, a: [1, {b: [{}]}, 2]}, - {num: 67, a: [1, {b: [{c: "scalar"}]}, 2]}, - {num: 68, a: [1, {b: [{c: {x: 1}}]}, 2]}, - {num: 69, a: [1, {b: [{c: [1, {}, 2]}]}, 2]}, - {num: 70, a: [1, {b: [1, {}, 2]}, 2]}, - {num: 71, a: [1, {b: [1, {c: null}, 2]}, 2]}, - {num: 72, a: [1, {b: [1, {c: "scalar"}, 2]}, 2]}, - {num: 73, a: [1, {b: [1, {c: [1, {}, 2]}, 2]}, 2]}, - {num: 74, a: [1, {b: [[1, 2], [{}], 2]}, 2]}, - {num: 75, a: [1, {b: [[1, 2], [{c: "scalar"}], 2]}, 2]}, - {num: 76, a: [1, {b: [[1, 2], [{c: [1, {}, 2]}], 2]}, 2]}, - {num: 77, a: [[1, 2], [{b: "scalar"}], 2]}, - {num: 78, a: [[1, 2], [{b: {x: 1, c: "scalar"}}], 2]}, - {num: 79, a: [[1, 2], [{b: {x: 1, c: [1, {}, 2]}}], 2]}, - {num: 80, a: [[1, 2], [{b: []}], 2]}, - {num: 81, a: [[1, 2], [{b: [1, {c: "scalar"}, 2]}], 2]}, - {num: 82, a: [[1, 2], [{b: [[1, 2], [{c: "scalar"}], 2]}], 2]}, - {num: 83, a: [[1, 2], [{b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}], 2]}, - {num: 84, a: [{b: [{c: 1}, {}]}]}, - {num: 85, a: [{b: [{c: 1}, {d: 1}]}]}, - {num: 86, a: [{b: {c: 1}}, {b: {}}]}, - {num: 87, a: [{b: {c: 1}}, {b: {d: 1}}]}, - {num: 88, a: [{b: {c: 1}}, {}]}, - {num: 89, a: [{b: {c: 1}}, {b: null}]}, - {num: 90, a: [{b: {c: 1}}, {b: []}]}, - {num: 91, a: [{b: []}, {b: []}]}, - {num: 92, a: {b: [{c: [1, 2]}]}}, - {num: 93, a: {b: {c: [1, 2]}}}, - {num: 94, a: [[1, 2], [{b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}], 2]}, - {num: 95, a: [{m: 1, n: 2}, {m: 2, o: 1}]}, + {_num: 0}, + {_num: 1, a: null}, + {_num: 2, a: "scalar"}, + {_num: 3, a: {}}, + {_num: 4, a: {x: 1, b: "scalar"}}, + {_num: 5, a: {b: {}}}, + {_num: 6, a: {x: 1, b: {}}}, + {_num: 7, a: {x: 1, b: {x: 1}}}, + {_num: 8, a: {b: {c: "scalar"}}}, + {_num: 9, a: {b: {c: null}}}, + {_num: 10, a: {b: {c: [[1, 2], [{}], 2]}}}, + {_num: 11, a: {x: 1, b: {x: 1, c: ["scalar"]}}}, + {_num: 12, a: {x: 1, b: {c: {x: 1}}}}, + {_num: 13, a: {b: []}}, + {_num: 14, a: {b: [null]}}, + {_num: 15, a: {b: ["scalar"]}}, + {_num: 16, a: {b: [[]]}}, + {_num: 17, a: {b: [1, {}, 2]}}, + {_num: 18, a: {b: [[1, 2], [{}], 2]}}, + {_num: 19, a: {x: 1, b: [[1, 2], [{}], 2]}}, + {_num: 20, a: {b: [{c: "scalar"}]}}, + {_num: 21, a: {b: [{c: "scalar"}, {c: "scalar2"}]}}, + {_num: 22, a: {b: [{c: [[1, 2], [{}], 2]}]}}, + {_num: 23, a: {b: [1, {c: "scalar"}, 2]}}, + {_num: 24, a: {b: [1, {c: [[1, 2], [{}], 2]}, 2]}}, + {_num: 25, a: {x: 1, b: [1, {c: [[1, 2], [{}], 2]}, 2]}}, + {_num: 26, a: {b: [[1, 2], [{c: "scalar"}], 2]}}, + {_num: 27, a: {b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}}, + {_num: 28, a: {x: 1, b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}}, + {_num: 29, a: []}, + {_num: 30, a: [null]}, + {_num: 31, a: ["scalar"]}, + {_num: 32, a: [[]]}, + {_num: 33, a: [{}]}, + {_num: 34, a: [1, {}, 2]}, + {_num: 35, a: [[1, 2], [{}], 2]}, + {_num: 36, a: [{b: "scalar"}]}, + {_num: 37, a: [{b: null}]}, + {_num: 38, a: [1, {b: "scalar"}, 2]}, + {_num: 39, a: [1, {b: []}, 2]}, + {_num: 40, a: [1, {b: [null]}, 2]}, + {_num: 41, a: [1, {b: ["scalar"]}, 2]}, + {_num: 42, a: [1, {b: [[]]}, 2]}, + {_num: 43, a: [{b: []}]}, + {_num: 44, a: [{b: ["scalar"]}]}, + {_num: 45, a: [{b: [[]]}]}, + {_num: 46, a: [{b: {}}]}, + {_num: 47, a: [{b: {c: "scalar"}}]}, + {_num: 48, a: [{b: {c: [[1, 2], [{}], 2]}}]}, + {_num: 49, a: [{b: {x: 1}}]}, + {_num: 50, a: [{b: {x: 1, c: "scalar"}}]}, + {_num: 51, a: [{b: [{c: "scalar"}]}]}, + {_num: 52, a: [{b: [{c: ["scalar"]}]}]}, + {_num: 53, a: [{b: [1, {c: ["scalar"]}, 2]}]}, + {_num: 54, a: [{b: [{}]}]}, + {_num: 55, a: [{b: [[1, 2], [{}], 2]}]}, + {_num: 56, a: [{b: [[1, 2], [{c: "scalar"}], 2]}]}, + {_num: 57, a: [{b: [[1, 2], [{c: ["scalar"]}], 2]}]}, + {_num: 58, a: [1, {b: {}}, 2]}, + {_num: 59, a: [1, {b: {c: "scalar"}}, 2]}, + {_num: 60, a: [1, {b: {c: {x: 1}}}, 2]}, + {_num: 61, a: [1, {b: {c: [1, {}, 2]}}, 2]}, + {_num: 62, a: [1, {b: {x: 1}}, 2]}, + {_num: 63, a: [1, {b: {x: 1, c: "scalar"}}, 2]}, + {_num: 64, a: [1, {b: {x: 1, c: [[]]}}, 2]}, + {_num: 65, a: [1, {b: {x: 1, c: [1, {}, 2]}}, 2]}, + {_num: 66, a: [1, {b: [{}]}, 2]}, + {_num: 67, a: [1, {b: [{c: "scalar"}]}, 2]}, + {_num: 68, a: [1, {b: [{c: {x: 1}}]}, 2]}, + {_num: 69, a: [1, {b: [{c: [1, {}, 2]}]}, 2]}, + {_num: 70, a: [1, {b: [1, {}, 2]}, 2]}, + {_num: 71, a: [1, {b: [1, {c: null}, 2]}, 2]}, + {_num: 72, a: [1, {b: [1, {c: "scalar"}, 2]}, 2]}, + {_num: 73, a: [1, {b: [1, {c: [1, {}, 2]}, 2]}, 2]}, + {_num: 74, a: [1, {b: [[1, 2], [{}], 2]}, 2]}, + {_num: 75, a: [1, {b: [[1, 2], [{c: "scalar"}], 2]}, 2]}, + {_num: 76, a: [1, {b: [[1, 2], [{c: [1, {}, 2]}], 2]}, 2]}, + {_num: 77, a: [[1, 2], [{b: "scalar"}], 2]}, + {_num: 78, a: [[1, 2], [{b: {x: 1, c: "scalar"}}], 2]}, + {_num: 79, a: [[1, 2], [{b: {x: 1, c: [1, {}, 2]}}], 2]}, + {_num: 80, a: [[1, 2], [{b: []}], 2]}, + {_num: 81, a: [[1, 2], [{b: [1, {c: "scalar"}, 2]}], 2]}, + {_num: 82, a: [[1, 2], [{b: [[1, 2], [{c: "scalar"}], 2]}], 2]}, + {_num: 83, a: [[1, 2], [{b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}], 2]}, + {_num: 84, a: [{b: [{c: 1}, {}]}]}, + {_num: 85, a: [{b: [{c: 1}, {d: 1}]}]}, + {_num: 86, a: [{b: {c: 1}}, {b: {}}]}, + {_num: 87, a: [{b: {c: 1}}, {b: {d: 1}}]}, + {_num: 88, a: [{b: {c: 1}}, {}]}, + {_num: 89, a: [{b: {c: 1}}, {b: null}]}, + {_num: 90, a: [{b: {c: 1}}, {b: []}]}, + {_num: 91, a: [{b: []}, {b: []}]}, + {_num: 92, a: {b: [{c: [1, 2]}]}}, + {_num: 93, a: {b: {c: [1, 2]}}}, + {_num: 94, a: [[1, 2], [{b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}], 2]}, + {_num: 95, a: [{m: 1, n: 2}, {m: 2, o: 1}]}, ]; coll.drop(); @@ -284,7 +284,7 @@ let bulk = coll.initializeUnorderedBulkOp(); for (let doc of docs) { let insertObj = {}; Object.assign(insertObj, doc); - if (doc.num % 2 == 0) { + if (doc._num % 2 == 0) { insertObj.optionalField = "foo"; } bulk.insert(insertObj); @@ -294,7 +294,7 @@ bulk.execute(); assert.commandWorked(coll.createIndex({"$**": "columnstore"})); (function testProjectionOfIndependentPaths() { - const kProjection = {_id: 0, "a.b.c": 1, num: 1, optionalField: 1}; + const kProjection = {_id: 0, _num: 1, "a.b.c": 1, optionalField: 1}; let explain = coll.find({}, kProjection).explain(); assert(planHasStage(db, explain, "COLUMN_SCAN"), @@ -304,15 +304,16 @@ assert.commandWorked(coll.createIndex({"$**": "columnstore"})); assert.eq(results.length, docs.length, "With no filter should have returned all docs"); for (let res of results) { - const trueResult = coll.find({num: res.num}, kProjection).hint({$natural: 1}).toArray()[0]; - const originalDoc = coll.findOne({num: res.num}); + const trueResult = + coll.find({_num: res._num}, kProjection).hint({$natural: 1}).toArray()[0]; + const originalDoc = coll.findOne({_num: res._num}); assert.docEq(res, trueResult, "Mismatched projection of " + tojson(originalDoc)); } })(); // Run a similar query that projects multiple fields with a shared parent object. (function testProjectionOfSiblingPaths() { - const kSiblingProjection = {_id: 0, "a.m": 1, "a.n": 1, num: 1}; + const kSiblingProjection = {_id: 0, _num: 1, "a.m": 1, "a.n": 1}; let explain = coll.find({}, kSiblingProjection).explain(); assert(planHasStage(db, explain, "COLUMN_SCAN"), @@ -323,15 +324,15 @@ assert.commandWorked(coll.createIndex({"$**": "columnstore"})); for (let res of results) { const trueResult = - coll.find({num: res.num}, kSiblingProjection).hint({$natural: 1}).toArray()[0]; - const originalDoc = coll.findOne({num: res.num}); + coll.find({_num: res._num}, kSiblingProjection).hint({$natural: 1}).toArray()[0]; + const originalDoc = coll.findOne({_num: res._num}); assert.eq(res, trueResult, "Mismatched projection of " + tojson(originalDoc)); } })(); // Run a query that tests the SERVER-67742 fix. (function testPrefixPath() { - const kPrefixProjection = {_id: 0, "a": 1, num: 1}; + const kPrefixProjection = {_id: 0, _num: 1, "a": 1}; // Have to use the index hint because SERVER-67264 blocks selection of CSI. let explain = coll.find({"a.m": 1}, kPrefixProjection).hint({"$**": "columnstore"}).explain(); @@ -347,8 +348,8 @@ assert.commandWorked(coll.createIndex({"$**": "columnstore"})); for (let res of results) { const trueResult = - coll.find({num: res.num}, kPrefixProjection).hint({$natural: 1}).toArray()[0]; - const originalDoc = coll.findOne({num: res.num}); + coll.find({_num: res._num}, kPrefixProjection).hint({$natural: 1}).toArray()[0]; + const originalDoc = coll.findOne({_num: res._num}); assert.eq(res, trueResult, "Mismatched projection of " + tojson(originalDoc)); } })(); @@ -358,7 +359,7 @@ assert.commandWorked(coll.createIndex({"$**": "columnstore"})); (function testGroup() { // Sanity check that we are comparing the plans we expect to be. let pipeline = [ - {$group: {_id: "$a.b.c", docs: {$push: "$num"}}}, + {$group: {_id: "$a.b.c", docs: {$push: "$_num"}}}, {$set: {docs: {$sortArray: {input: "$docs", sortBy: 1}}}} ]; let naturalExplain = coll.explain().aggregate(pipeline, {hint: {$natural: 1}}); diff --git a/jstests/core/columnstore/columnstore_large_array_index_correctness.js b/jstests/core/columnstore/columnstore_large_array_index_correctness.js index 3c15b62e247..dbedb3ce597 100644 --- a/jstests/core/columnstore/columnstore_large_array_index_correctness.js +++ b/jstests/core/columnstore/columnstore_large_array_index_correctness.js @@ -26,16 +26,16 @@ const coll = db.columnstore_large_array_index_correctness; coll.drop(); const uint8 = { - num: 0, - a: Array.from({length: 50}, (_, i) => ({b: [2 * i, 2 * i + 1]})) + _num: 0, + o: Array.from({length: 50}, (_, i) => ({b: [2 * i, 2 * i + 1]})), }; const uint16 = { - num: 1, - a: Array.from({length: 150}, (_, i) => ({b: [2 * i, 2 * i + 1]})) + _num: 1, + o: Array.from({length: 150}, (_, i) => ({b: [2 * i, 2 * i + 1]})), }; const uint32 = { - num: 2, - a: Array.from({length: 15000}, (_, i) => ({b: [2 * i, 2 * i + 1]})) + _num: 2, + o: Array.from({length: 15000}, (_, i) => ({b: [2 * i, 2 * i + 1]})), }; const docs = [uint8, uint16, uint32]; @@ -47,27 +47,27 @@ for (let doc of docs) { assert.commandWorked(coll.createIndex({"$**": "columnstore"})); const kProjection = { _id: 0, - "a.b": 1, - num: 1, + _num: 1, + "o.b": 1, }; // Ensure this test is exercising the column scan. -let explain = coll.find({}, kProjection).sort({num: 1}).explain(); +let explain = coll.find({}, kProjection).sort({_num: 1}).explain(); assert(planHasStage(db, explain, "COLUMN_SCAN"), explain); // Run a query getting all of the results using the column index. -let results = coll.find({}, kProjection).sort({num: 1}).toArray(); +let results = coll.find({}, kProjection).sort({_num: 1}).toArray(); assert.gt(results.length, 0); // Run a query getting all results without column index -let trueResults = coll.find({}, kProjection).hint({$natural: 1}).sort({num: 1}).toArray(); +let trueResults = coll.find({}, kProjection).hint({$natural: 1}).sort({_num: 1}).toArray(); assert.eq(results.length, trueResults.length); for (let i = 0; i < results.length; i++) { - const originalDoc = coll.findOne({num: results[i].num}); + const originalDoc = coll.findOne({_num: results[i]._num}); assert.eq(results[i], trueResults[i], () => - `column store index output number: ${results[i].num}, collection scan output number: ${trueResults[i].num}, - original document number was: ${originalDoc.num}`); + `column store index output number: ${results[i]._num}, collection scan output number: ${trueResults[i]._num}, + original document number was: ${originalDoc._num}`); } })(); |