fix: handle EXISTS/NOT EXISTS subqueries in federation analyzer#68
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
Fixes federation analysis for cross-provider queries that use EXISTS/NOT EXISTS predicate subqueries by ensuring the analyzer inspects tables referenced inside Expr::Exists and federates subqueries correctly.
Changes:
- Extend provider scanning to traverse
Expr::Existssubquery plans when determining whether a subtree is single-provider or cross-provider. - Extend expression rewriting to recursively analyze/federate
EXISTSsubqueries, including a compatibility workaround for optimizer rules by wrapping federated subqueries in a no-opProjectionwhen needed.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
sgrebnov
commented
Apr 5, 2026
krinart
approved these changes
Apr 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🗣 Description
Cross-provider queries with
EXISTS/NOT EXISTSsubquery filters fail because the federation analyzer doesn't inspect tables insideExpr::Exists. As a result the analyzer only sees the outer query's tables, concludes single provider, and federates the entire query — including the subquery's tables — to one DBMS, where the subquery's table doesn't exist (e.g.,no such table: lineitem)🔨 Related Issues
Fixes spiceai/spiceai#10167
🤔 Concerns