Move the Express plan executor into its own library so it links without query_exec

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Fixed
    • Priority: Major - P3
    • 9.0.0-rc0
    • Affects Version/s: None
    • Component/s: None
    • None
    • Query Execution
    • Fully Compatible
    • QE 2026-06-22
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      The Express single-document lookup executor (SPM-4535) is wired into the change-stream
      pipeline (SERVER-128414), which links it into binaries that pull change_stream_pipeline
      but not query_exec, notably the enterprise mongocryptd_with_debug. Those binaries
      fail to link with undefined symbols (makeExpressExecutorForFindById,
      makeExpressExecutorForFindByClusteredId, ProjectionStageSimple::transform), because
      the Express plan executor and its helpers are compiled directly into the query_exec
      monolith.

      A direct query_exec dependency cannot be added, because it forms a
      query_exec -> change_stream_pipeline -> express -> query_exec cycle.

      This ticket moves the Express plan executor into its own library that sits below both
      query_exec and the single-document lookup executor:

      • New //src/mongo/db/exec/express:express_executor library holding express_plan.cpp,
        plan_executor_express.cpp and plan_explainer_express.cpp, moved out of the query_exec
        source list. query_exec now depends on this library.
      • ProjectionStageSimple::transform becomes a header-inline template, so it links at each
        call site instead of relying on an out-of-line explicit instantiation owned by
        query_exec.

      No behavior change. This is a pure build and layering refactor, verified by an aarch64-opt
      build of install-dist-test and mongocryptd_with_debug.

      Prerequisite for SERVER-128413 and SERVER-128414 (Express wired live); lands beneath them in
      the stack.

            Assignee:
            Denis Grebennicov
            Reporter:
            Denis Grebennicov
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: