summaryrefslogtreecommitdiff
path: root/jstests/libs/optimizer_utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/libs/optimizer_utils.js')
-rw-r--r--jstests/libs/optimizer_utils.js22
1 files changed, 22 insertions, 0 deletions
diff --git a/jstests/libs/optimizer_utils.js b/jstests/libs/optimizer_utils.js
index ff2a179388a..35346e02c67 100644
--- a/jstests/libs/optimizer_utils.js
+++ b/jstests/libs/optimizer_utils.js
@@ -1,3 +1,5 @@
+load("jstests/libs/analyze_plan.js");
+
/*
* Utility for checking if the query optimizer is enabled.
*/
@@ -6,3 +8,23 @@ function checkCascadesOptimizerEnabled(theDB) {
return param.hasOwnProperty("featureFlagCommonQueryFramework") &&
param.featureFlagCommonQueryFramework.value;
}
+
+/**
+ * Given the result of an explain command, returns whether the bonsai optimizer was used.
+ */
+function usedBonsaiOptimizer(explain) {
+ if (explain.hasOwnProperty("queryPlanner") &&
+ !explain.queryPlanner.winningPlan.hasOwnProperty("optimizerPlan")) {
+ // Find command explain which means new optimizer was not used.
+ // TODO SERVER-62407 this assumption may no longer hold true if the translation to ABT
+ // happens directly from a find command.
+ return false;
+ }
+
+ const plannerOutput = getAggPlanStage(explain, "$cursor");
+ if (plannerOutput != null) {
+ return plannerOutput["$cursor"].queryPlanner.winningPlan.hasOwnProperty("optimizerPlan");
+ } else {
+ return explain.queryPlanner.winningPlan.hasOwnProperty("optimizerPlan");
+ }
+} \ No newline at end of file