Skip to content

CPP: Disable dynamic join ordering for select predicates - #22892

Open
kaspersv wants to merge 1 commit into
mainfrom
kaspersv/disable-rtjo-for-select-preds-cpp
Open

kaspersv wants to merge 1 commit into
mainfrom
kaspersv/disable-rtjo-for-select-preds-cpp

Conversation

@kaspersv

Copy link
Copy Markdown
Contributor

We are working on a new dynamic join orderer for CodeQL that join orders predicates at evaluation-time using run-time cardinality information instead of relying on a statically chosen join order decided at compilation-time. At the moment a couple of CPP predicates are join ordered badly by the dynamic join orderer. This PR disables dynamic join ordering for the affected predicates.

Dynamic join ordering is still disabled by default during compilation and evaluation and the no_dynamic_join_order pragma has no effect on compilation when dynamic join ordering is not explicitly enabled during compilation.

@kaspersv
kaspersv requested a review from a team as a code owner October 26, 2026 11:19
@kaspersv kaspersv added the no-change-note-required This PR does not need a change note label Oct 26, 2026
Copilot AI max review requested due to automatic review settings October 26, 2026 11:19

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The four narrowly scoped optimization annotations preserve analysis logic and introduce no identified blocking issues.

No open issues 🎉

What changed in this PR

Opts selected C++ analysis predicates out of dynamic join ordering to avoid poor evaluation plans when that feature is enabled. Existing analysis logic and default behavior remain unchanged.

Changes:

  • Add no_dynamic_join_order to lower- and upper-bound calculations and the value-number bound constructor.
  • Apply the same annotation to local expression-flow traversal.
File Description
cpp/​ql/​lib/​semmle/​code/​cpp/​rangeanalysis/​SimpleRangeAnalysis.qll Disable dynamic join ordering for lower- and upper-bound implementations.
cpp/​ql/​lib/​semmle/​code/​cpp/​rangeanalysis/​new/​internal/​semantic/​analysis/​Bound.qll Disable dynamic join ordering for TBoundValueNumber.
cpp/​ql/​lib/​semmle/​code/​cpp/​ir/​dataflow/​internal/​DataFlowUtil.qll Disable dynamic join ordering for localExprFlowStepImpl.

Review effort: Max

@jketema jketema left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@github-actions github-actions Bot added the C++ label Oct 26, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

C++ no-change-note-required This PR does not need a change note

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants