Skip to content

C#: Disable dynamic join ordering for select predicate - #22891

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

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

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 C# 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:16
Copilot AI max review requested due to automatic review settings October 26, 2026 11:16
@kaspersv kaspersv added the no-change-note-required This PR does not need a change note label Oct 26, 2026

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 two targeted pragma additions preserve predicate logic and introduce no identified blocking issues.

No open issues 🎉

What changed in this PR

This PR disables dynamic join ordering for two C# predicates to avoid poor runtime join plans when the experimental orderer is enabled.

Changes:

  • Add pragma[no_dynamic_join_order] to couldCallEnclosingOperator and the four-argument hasQualifiedName.
  • Leave predicate logic, interfaces, and default compilation behavior unchanged.
File Description
csharp/​ql/​src/​Language Abuse/​SimplifyBoolExpr.ql Disable dynamic join ordering for couldCallEnclosingOperator.
csharp/​ql/​lib/​semmle/​code/​csharp/​commons/​QualifiedName.qll Disable dynamic join ordering for four-argument hasQualifiedName.

Review effort: Max

@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