-
Notifications
You must be signed in to change notification settings - Fork 669
Oracle: Support for MERGE predicates #2101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
xitep
wants to merge
8
commits into
apache:main
Choose a base branch
from
xitep:merge-predicates
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
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
9f705bc to
f406386
Compare
iffyio
reviewed
Nov 25, 2025
Contributor
|
@xitep Re this and #2103 PRs, The parser currently doesn't support oracle as a dialect, so that it would be a bit confusing going forward having code specific to the dialect but being unable to guarantee its consistency/behavior. I'm thinking we could instead start by introducing oracle as a supported dialect here? |
Contributor
Author
|
c316622 to
b0c0ae2
Compare
91eb047 to
0d25537
Compare
0d25537 to
0d30912
Compare
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.
Oracle supports small extensions to the standard MERGE syntax (that I'd need to support.) In particular:
... WHEN MATCHED ... UPDATE ... ***[WHERE <expr>] [DELETE WHERE <expr>]***... WHEN NOT MATCHED ... INSERT ... ***[WHERE <expr>]***Here's the documentation for reference.
Quoted column names
Additionally, Oracle also allows quoted names in
MERGE INTO a.b ... INSERT (a.b.col1, a.b.col2) ...(or event... INSERT (b.col1, b.col2) ...with the same meaning as... INSERT (col1, col2)as long asa.bdenotes the target table of the merge.For the sake of compatibility, this draft PR makes a trade-off: the parser validates that "a.b." corresponds to the target table, and strips away the prefix in order to keep
MergeInsertExpr::columnsaVec<Ident>. While preserving semantics, the implication is that such a parsed statements doesn't render back in the exact same form, though.Not doing the validation and stripping, we'd probably need to end up with a
Vec<QualifiedName>. I would be glad to hear your opinion how to move forward. Personally, I'd be fine with theVec<QualifiedName>allowing me to re-produce the statement as originally written.Note
Parser::merge_parse_clausesprivate.)Mergestruct akin toInsert,Update, ... this makes it easier to pass the merge-relevat data around in a type-safe wayMissing
Vec<ObjectName>