Skip to content

Conversation

@jonnelaaglandwinder
Copy link

  • Do only one thing
  • Non breaking API changes
  • Tested

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.

@propel-code-bot
Copy link
Contributor

Add DEFERRABLE support to foreign-key constraints

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant