cherrypick: sql: two bugfixes to fks that use a partial index #17653
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.
Cherrypick of #17638.
Previously, tables with foreign key references that were a prefix of a pre-existing index could have their foreign key constraints violated by deletion from the referenced table.
This means that any tables created on 1.0 (and earlier) versions with foreign key constraints on an index prefix might have constraint violations if rows were deleted from the referenced table.
The tests missed this case because of an unhappy coincidence - the proximal cause of the failure mode was that the key into the referencing index was encoded with the full length of the referencing index, even though the foreign key itself had less columns that that index. This
caused the key to contain NULL values at the end. The test case that was supposed to guard against this problem had NULL values in the referencing value at the end positions of the key, so a match was found and the deletion was prevented.
Also, SHOW CREATE TABLE for tables with such foreign keys produced incorrect output.
Fixes #17626.
cc @cockroachdb/release