From 5fd3e8b800b43c25d92530fc1b3e0b9bbec7bf6b Mon Sep 17 00:00:00 2001 From: Anna Wawrzyniak Date: Wed, 12 Jan 2022 18:42:57 +0000 Subject: SERVER-59960 Make ContextCtx::root optional --- src/mongo/db/exec/sbe/expressions/expression.cpp | 4 +++- src/mongo/db/exec/sbe/expressions/expression.h | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mongo/db/exec/sbe/expressions/expression.cpp b/src/mongo/db/exec/sbe/expressions/expression.cpp index 2072f793492..4f9ad6ce653 100644 --- a/src/mongo/db/exec/sbe/expressions/expression.cpp +++ b/src/mongo/db/exec/sbe/expressions/expression.cpp @@ -107,7 +107,9 @@ vm::CodeFragment EVariable::compileDirect(CompileCtx& ctx) const { int offset = -_var - 1; code.appendLocalVal(*_frameId, offset, _moveFrom); } else { - auto accessor = ctx.root->getAccessor(ctx, _var); + // ctx.root is optional. If root stage is not specified, then resolve the variable using + // default context rules. + auto accessor = ctx.root ? ctx.root->getAccessor(ctx, _var) : ctx.getAccessor(_var); if (_moveFrom) { code.appendMoveVal(accessor); } else { diff --git a/src/mongo/db/exec/sbe/expressions/expression.h b/src/mongo/db/exec/sbe/expressions/expression.h index 71ee0251d8a..29055c7bc96 100644 --- a/src/mongo/db/exec/sbe/expressions/expression.h +++ b/src/mongo/db/exec/sbe/expressions/expression.h @@ -237,7 +237,13 @@ struct CompileCtx { CompileCtx makeCopyForParallelUse(); CompileCtx makeCopy() const; + /** + * Root plan stage is used to resolve slot accessors introduced by PlanStage (optional). + * - if specified, the root plan stage will be used to resolve the slot accessor. + * - otherwise, if null, default context accessor resolution rules will be used. + */ PlanStage* root{nullptr}; + value::SlotAccessor* accumulator{nullptr}; std::vector> correlated; stdx::unordered_map> spoolBuffers; -- cgit v1.2.1