sqlbase: add support for ON DELETE/UPDATE SET DEFAULT actions for FK references #22220
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.
This change follows the two that added ON DELETE SET NULL and ON UPDATE SET
NULL and reuses the same code paths in the cascader. In this case, instead of
creating a collection of NULLs for Column IDs, the default values are evaluated
and use when creating the updated row.
Again, most of the work was in adding in new tests to ensure that all strange
edge cases were covered.
The addition of SET NULL added the complication of possibly cascading a NULL
value into NOT NULL column. For the addition of SET DEFAULT, a new complication
arose, it is now possible to inadvertently break a UNIQUE constraint. Luckily,
this was being handled correctly and failing the transaction's run batch, but
the errors were left unconverted so by adding in the ConvertBatchError this
edge case was correctly handled.
Similar to with SET NULL, a restriction had to be added to prevent adding a SET
DEFAULT action to a column that doesn't have a default value. While there I
also updated the error produced by the similar SET NULL on a NOT NULL column's
error message to use the tree.ErrString.
Release note (sql change): ON DELETE SET DEFAULT and ON UPDATE SET DEFAULT
foreign key constraints actions are now fully supported