Skip to content

Java: Disable dynamic join ordering for select predicate - #22893

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

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

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 Java predicate is join ordered badly by the dynamic join orderer. This PR disables dynamic join ordering for the affected predicate.

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:21
Copilot AI max review requested due to automatic review settings October 26, 2026 11:21

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 narrowly scoped optimizer annotation leaves predicate logic unchanged and has no identified blocking issues.

No open issues 🎉

What changed in this PR

This PR disables dynamic join ordering for Java’s compile-time constant-expression predicate to avoid a poor runtime join order.

Changes:

  • Adds pragma[no_dynamic_join_order] to CompileTimeConstantExpr() without changing predicate logic or compilation when dynamic join ordering is disabled.
File Description
java/​ql/​lib/​semmle/​code/​java/​Expr.qll Disables dynamic join ordering for the constant-expression characteristic predicate.

Review effort: Max

@github-actions github-actions Bot added the Java label Oct 26, 2026
@kaspersv kaspersv added the no-change-note-required This PR does not need a change note label Oct 26, 2026
@kaspersv

Copy link
Copy Markdown
Contributor Author

Rebased on main for CI fix.

@kaspersv
kaspersv force-pushed the kaspersv/disable-rtjo-for-select-preds-java branch from 10196fa to 0777c0d Compare October 26, 2026 14:27

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

Java 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