You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adds support for the DEFERRABLE keyword on constraints
User Case Description
I have a couple of tables which are updated by truncating and reinserting rows, but they have strong references for which deletes shouldn't be cascading if they're still consistent with the new data. I solved this by making the constraints deferrable, and deferring them for the transaction.
This required recreating the constraints by hand, since DEFERRED support is missing from the constraint structtag. Simply adding support turned out to be trivial, so that's what I ended up doing so that AutoMigrate suffices.
Introduces the ability to declare deferred foreign-key constraints through GORM tags. A new Deferrable field is added to the internal Constraint model and is propagated through constraint parsing and SQL generation. A dedicated unit test confirms correct parsing and SQL output when constraint:deferrable:initially deferred is present.
Key Changes
• Added Deferrable string field to schema/relationship.go's Constraint struct
• Extended Constraint.Build() to append DEFERRABLE <value> when set
• Extended Relationship.ParseConstraint() to capture DEFERRABLE tag (upper-cased)
• Introduced TestDeferrable in schema/relationship_test.go validating struct-tag parsing and generated SQL
• Minor import update in schema/relationship_test.go (strings added)
Affected Areas
• schema/relationship.go – constraint parsing and SQL builder
• schema/relationship_test.go – new test cases
This summary was automatically generated by @propel-code-bot
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
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.
What did this pull request do?
Adds support for the DEFERRABLE keyword on constraints
User Case Description
I have a couple of tables which are updated by truncating and reinserting rows, but they have strong references for which deletes shouldn't be cascading if they're still consistent with the new data. I solved this by making the constraints deferrable, and deferring them for the transaction.
This required recreating the constraints by hand, since DEFERRED support is missing from the constraint structtag. Simply adding support turned out to be trivial, so that's what I ended up doing so that AutoMigrate suffices.