summaryrefslogtreecommitdiff
path: root/jstests/core
diff options
context:
space:
mode:
authorAnna Wawrzyniak <anna.wawrzyniak@mongodb.com>2022-10-12 14:45:02 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-10-12 16:15:24 +0000
commit2e51cfe597385fadd4d7610ada1111b00dccb14f (patch)
tree242f32d6841e1eaed65c8928474e4e9eef262ffb /jstests/core
parent57746791113c36c0c6a010da2deb580ea3cb97ad (diff)
downloadmongo-2e51cfe597385fadd4d7610ada1111b00dccb14f.tar.gz
SERVER-66435 Always use classic engine for IDhack plans
Diffstat (limited to 'jstests/core')
-rw-r--r--jstests/core/collation.js8
-rw-r--r--jstests/core/idhack.js16
-rw-r--r--jstests/core/index_filter_commands.js5
-rw-r--r--jstests/core/projection_dotted_paths.js6
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.