diff options
author | Anna Wawrzyniak <anna.wawrzyniak@mongodb.com> | 2022-10-12 14:45:02 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-10-12 16:15:24 +0000 |
commit | 2e51cfe597385fadd4d7610ada1111b00dccb14f (patch) | |
tree | 242f32d6841e1eaed65c8928474e4e9eef262ffb /jstests/core | |
parent | 57746791113c36c0c6a010da2deb580ea3cb97ad (diff) | |
download | mongo-2e51cfe597385fadd4d7610ada1111b00dccb14f.tar.gz |
SERVER-66435 Always use classic engine for IDhack plans
Diffstat (limited to 'jstests/core')
-rw-r--r-- | jstests/core/collation.js | 8 | ||||
-rw-r--r-- | jstests/core/idhack.js | 16 | ||||
-rw-r--r-- | jstests/core/index_filter_commands.js | 5 | ||||
-rw-r--r-- | jstests/core/projection_dotted_paths.js | 6 |
4 files changed, 12 insertions, 23 deletions
diff --git a/jstests/core/collation.js b/jstests/core/collation.js index d329100ac98..b5e5c3aa54f 100644 --- a/jstests/core/collation.js +++ b/jstests/core/collation.js @@ -725,9 +725,7 @@ if (!isClustered) { explainRes = coll.explain("executionStats").find({_id: "foo"}).collation({locale: "en_US"}).finish(); assert.commandWorked(explainRes); - classicAssert = null !== getPlanStage(explainRes.executionStats.executionStages, "IDHACK"); - sbeAssert = null !== getPlanStage(getWinningPlan(explainRes.queryPlanner), "IXSCAN"); - engineSpecificAssertion(classicAssert, sbeAssert, db, explainRes); + assert.neq(null, getPlanStage(explainRes.executionStats.executionStages, "IDHACK"), explainRes); // Find on _id should not use idhack stage when query collation does not match collection // default. @@ -737,9 +735,7 @@ if (!isClustered) { coll.explain("executionStats").find({_id: "foo"}).collation({locale: "fr_CA"}).finish(); assert.commandWorked(explainRes); - classicAssert = null === getPlanStage(explainRes.executionStats.executionStages, "IDHACK"); - sbeAssert = null === getPlanStage(getWinningPlan(explainRes.queryPlanner), "IXSCAN"); - engineSpecificAssertion(classicAssert, sbeAssert, db, explainRes); + assert.eq(null, getPlanStage(explainRes.executionStats.executionStages, "IDHACK"), explainRes); } // Find should select compatible index when no collation specified and collection has a default diff --git a/jstests/core/idhack.js b/jstests/core/idhack.js index 69c157221e0..e60bd9c8a50 100644 --- a/jstests/core/idhack.js +++ b/jstests/core/idhack.js @@ -11,7 +11,7 @@ t.drop(); // Include helpers for analyzing explain output. load("jstests/libs/analyze_plan.js"); -load("jstests/libs/sbe_explain_helpers.js"); +load("jstests/libs/sbe_util.js"); // For checkSBEEnabled. assert.commandWorked(t.insert({_id: {x: 1}, z: 1})); assert.commandWorked(t.insert({_id: {x: 2}, z: 2})); @@ -40,34 +40,32 @@ let explain = t.find(query).explain("allPlansExecution"); assert.eq(1, explain.executionStats.nReturned, explain); assert.eq(1, explain.executionStats.totalKeysExamined, explain); let winningPlan = getWinningPlan(explain.queryPlanner); -engineSpecificAssertion( - isIdhack(db, winningPlan), isIdIndexScan(db, winningPlan, "FETCH"), db, winningPlan); +assert(isIdhack(db, winningPlan), winningPlan); // ID hack cannot be used with hint(). t.createIndex({_id: 1, a: 1}); explain = t.find(query).hint({_id: 1, a: 1}).explain(); winningPlan = getWinningPlan(explain.queryPlanner); -engineSpecificAssertion(!isIdhack(db, winningPlan), isIxscan(db, winningPlan), db, winningPlan); +assert(!isIdhack(db, winningPlan), winningPlan); // ID hack cannot be used with skip(). explain = t.find(query).skip(1).explain(); winningPlan = getWinningPlan(explain.queryPlanner); -engineSpecificAssertion(!isIdhack(db, winningPlan), isIxscan(db, winningPlan), db, winningPlan); +assert(!isIdhack(db, winningPlan), winningPlan); // ID hack cannot be used with a regex predicate. assert.commandWorked(t.insert({_id: "abc"})); explain = t.find({_id: /abc/}).explain(); assert.eq({_id: "abc"}, t.findOne({_id: /abc/})); winningPlan = getWinningPlan(explain.queryPlanner); -engineSpecificAssertion(!isIdhack(db, winningPlan), isIxscan(db, winningPlan), db, winningPlan); +assert(!isIdhack(db, winningPlan), winningPlan); // Covered query returning _id field only can be handled by ID hack. const isSbeEnabled = checkSBEEnabled(db, ["featureFlagSbeFull"]); const parentStage = isSbeEnabled ? "PROJECTION_COVERED" : "FETCH"; explain = t.find(query, {_id: 1}).explain(); winningPlan = getWinningPlan(explain.queryPlanner); -engineSpecificAssertion( - isIdhack(db, winningPlan), isIdIndexScan(db, winningPlan, parentStage), db, winningPlan); +assert(isIdhack(db, winningPlan), winningPlan); // Check doc from covered ID hack query. assert.eq({_id: {x: 2}}, t.findOne(query, {_id: 1}), explain); @@ -116,5 +114,5 @@ assert.eq(0, t.find({_id: 1}).hint({_id: 1}).min({_id: 2}).itcount()); explain = t.find({_id: 2}).hint({_id: 1}).min({_id: 1}).max({_id: 3}).explain(); winningPlan = getWinningPlan(explain.queryPlanner); -engineSpecificAssertion(!isIdhack(db, winningPlan), isIxscan(db, winningPlan), db, winningPlan); +assert(!isIdhack(db, winningPlan), winningPlan); })(); diff --git a/jstests/core/index_filter_commands.js b/jstests/core/index_filter_commands.js index 4c37b2d068c..68cf83166a5 100644 --- a/jstests/core/index_filter_commands.js +++ b/jstests/core/index_filter_commands.js @@ -38,7 +38,7 @@ load("jstests/libs/analyze_plan.js"); load("jstests/libs/clustered_collections/clustered_collection_util.js"); load("jstests/libs/fixture_helpers.js"); // For 'FixtureHelpers'. -load("jstests/libs/sbe_explain_helpers.js"); +load("jstests/libs/sbe_util.js"); // For checkSBEEnabled. const coll = db.jstests_index_filter_commands; @@ -205,8 +205,7 @@ if (collectionIsClustered) { assert(isClusteredIxscan(db, getWinningPlan(explain.queryPlanner)), "Expected clustered ixscan: " + tojson(explain)); } else { - engineSpecificAssertion( - isIdhack(db, winningPlan), isIdIndexScan(db, winningPlan, "FETCH"), db, winningPlan); + assert(isIdhack(db, winningPlan), winningPlan); } // Clearing filters on a missing collection should be a no-op. diff --git a/jstests/core/projection_dotted_paths.js b/jstests/core/projection_dotted_paths.js index a09beafcbae..1f097b287f1 100644 --- a/jstests/core/projection_dotted_paths.js +++ b/jstests/core/projection_dotted_paths.js @@ -13,7 +13,6 @@ load("jstests/libs/analyze_plan.js"); load("jstests/aggregation/extras/utils.js"); // arrayEq -load("jstests/libs/sbe_explain_helpers.js"); let coll = db["projection_dotted_paths"]; coll.drop(); @@ -65,10 +64,7 @@ resultDoc = coll.findOne({_id: 1}, {_id: 0, "b.c": 1, "b.e": 1, c: 1}); assert.docEq(resultDoc, {b: {c: 1, e: 1}, c: 1}); explain = coll.find({_id: 1}, {_id: 0, "b.c": 1, "b.e": 1, c: 1}).explain("queryPlanner"); -engineSpecificAssertion(isIdhack(db, getWinningPlan(explain.queryPlanner)), - isIxscan(db, getWinningPlan(explain.queryPlanner)), - db, - explain); +assert(isIdhack(db, getWinningPlan(explain.queryPlanner)), explain); // If we make a dotted path multikey, projections using that path cannot be covered. But // projections which do not include the multikey path can still be covered. |