diff options
Diffstat (limited to 'jstests/libs/optimizer_utils.js')
-rw-r--r-- | jstests/libs/optimizer_utils.js | 22 |
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 |