-
Notifications
You must be signed in to change notification settings - Fork 3.8k
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
release-24.3: crosscluster/logical: handle user-defined types in SQL mode #133295
Merged
Conversation
This file contains 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
Previously, using a user-defined type in SQL mode would fail because of a low level check in the execution engine that verifies that the input datum has the same type OID as the destination column. This does not work for LDR, since the input datums come directly from a source table in a different cluster, so user-defined types have different OIDs. This fixes it by setting the datum type to "unknown" before executing the insert query. The "unknown" type is what is normally used when any SQL statement is sent to CRDB without explicit type annotations/hints. When the execution engine sees this type, it will perform an automatic (and cheap) immutable assignment cast to change the datum to the appropriate type. Release note (ops change): Logical replication streams that reference tables with user-defined types can now be created with the `mode = immediate` option.
Since we're using this type resolver for more than just IMPORT, it makes more sense to put it in a more fitting package. Release note: None
blathers-crl
bot
force-pushed
the
blathers/backport-release-24.3-133280
branch
from
October 23, 2024 19:57
a0605fe
to
ee1a856
Compare
blathers-crl
bot
requested review from
jeffswenson
and removed request for
a team
October 23, 2024 19:57
blathers-crl
bot
added
blathers-backport
This is a backport that Blathers created automatically.
O-robot
Originated from a bot.
labels
Oct 23, 2024
Thanks for opening a backport. Please check the backport criteria before merging:
If your backport adds new functionality, please ensure that the following additional criteria are satisfied:
Also, please add a brief release justification to the body of your PR to justify this |
blathers-crl
bot
added
the
backport
Label PR's that are backports to older release branches
label
Oct 23, 2024
rafiss
requested review from
a team
and removed request for
rytaft and
mgartner
October 23, 2024 20:12
msbutler
approved these changes
Oct 23, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
backport
Label PR's that are backports to older release branches
blathers-backport
This is a backport that Blathers created automatically.
O-robot
Originated from a bot.
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.
Backport 2/2 commits from #133280 on behalf of @rafiss.
/cc @cockroachdb/release
This PR also includes a cleanup refactor:
importer,crosscluster: move type resolver to a different package
Since we're using this type resolver for more than just IMPORT, it makes
more sense to put it in a more fitting package.
crosscluster/logical: handle user-defined types in SQL mode
Previously, using a user-defined type in SQL mode would fail because of
a low level check in the execution engine that verifies that the input
datum has the same type OID as the destination column.
This does not work for LDR, since the input datums come directly from a
source table in a different cluster, so user-defined types have
different OIDs.
This fixes it by setting the datum type to "unknown" before executing
the insert query. The "unknown" type is what is normally used when any
SQL statement is sent to CRDB without explicit type annotations/hints.
When the execution engine sees this type, it will perform an automatic
(and cheap) immutable assignment cast to change the datum to the
appropriate type.
fixes #132164
Release note (ops change): Logical replication streams that reference
tables with user-defined types can now be created with the
mode = immediate
option.Release justification: resolve a GA blocker