Add support for 'OnUpdate' #61
Merged
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
Fixes
TestForeignKeyConstraints
andTestForeignKeyConstraintsBelongsTo
.uniqueIndex
tounique
Oracle does not treat a unique index the same as a unique constraint.
When a column is tagged with uniqueIndex, GORM generates a unique index, but foreign key constraints in Oracle require the referenced column to be backed by a unique constraint.
For example, given the following structs:
the generated SQL is:
Which fails with:
ORA-02270: no matching unique or primary key for this column-list
Changing the tag to unique generates the correct SQL:
OnUpdate
Unlike other databases, Oracle does not directly support the
ON UPDATE
foreign key constraint. To work around this, the driver generates a trigger that simulates theON UPDATE
behavior. When a constraint is tagged withOnUpdate
, the driver skips generating the unsupported SQL and instead creates a trigger that cascades updates whenever the referenced column in the parent table changes.The trigger is automatically dropped when the table is dropped or when
DropConstraint()
is called.Added a test
TestMigrateOnUpdateConstraint
to verify this feature.