Skip to content

Shared: Disable dynamic join ordering for select predicates - #22894

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

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

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 predicates in shared libraries 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:23
@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:23

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 changes are limited to established optimizer annotations, preserve predicate logic, and have no identified blocking issues.

No open issues 🎉

What changed in this PR

Disables dynamic join ordering for seven shared dataflow and range-analysis predicates to avoid poor runtime join plans when the feature is enabled.

Changes:

  • Adds pragma[no_dynamic_join_order] to five dataflow predicates and two range-analysis predicates.
  • Preserves predicate logic, interfaces, and default compilation behavior.
File Description
shared/​rangeanalysis/​codeql/​rangeanalysis/​RangeAnalysis.qll Adds the pragma to boundedSsa and initialBounded.
shared/​dataflow/​codeql/​dataflow/​internal/​DataFlowImplCommon.qll Adds the pragma to three shared dataflow predicates.
shared/​dataflow/​codeql/​dataflow/​internal/​DataFlowImpl.qll Adds the pragma to flowIntoCallApValid and revFlowIn.

Review effort: Max

aschackmull
aschackmull previously approved these changes Oct 26, 2026
@kaspersv
kaspersv force-pushed the kaspersv/disable-rtjo-for-select-preds-shared branch from 35f6819 to 6fc8b35 Compare October 26, 2026 12:16
@kaspersv

Copy link
Copy Markdown
Contributor Author

Fixed QL formatting and rebased on main to try to fix failing CI check. A CI check is still failing which appears to be due to missing Python 3.12 in the runner image.

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

DataFlow Library 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