Skip to content

fix(Migrator): disable foreign keys during DropColumn#229

Open
lihan3238 wants to merge 1 commit into
go-gorm:masterfrom
lihan3238:fix-119-dropcolumn-fk
Open

fix(Migrator): disable foreign keys during DropColumn#229
lihan3238 wants to merge 1 commit into
go-gorm:masterfrom
lihan3238:fix-119-dropcolumn-fk

Conversation

@lihan3238
Copy link
Copy Markdown

Closes #119

Problem

DropColumn fails when foreign keys are enabled because it calls recreateTable, which performs DROP TABLE + INSERT INTO + ALTER TABLE RENAME. SQLite enforces FK constraints on the INSERT INTO step, causing the operation to fail with constraint violation errors.

Solution

Wrap DropColumn in RunWithoutForeignKey, following the exact same pattern already used by AlterColumn and DropTable in this file.

Before

func (m Migrator) DropColumn(value interface{}, name string) error {
    return m.recreateTable(value, nil, func(...) { ... })
}

After

func (m Migrator) DropColumn(value interface{}, name string) error {
    return m.RunWithoutForeignKey(func() error {
        return m.recreateTable(value, nil, func(...) { ... })
    })
}

DropColumn calls recreateTable which performs DROP TABLE + INSERT INTO +
ALTER TABLE RENAME. When foreign keys are enabled, SQLite enforces FK
constraints on the INSERT INTO step, causing the operation to fail.

Wrap DropColumn in RunWithoutForeignKey, following the same pattern
already used by AlterColumn and DropTable.

Closes go-gorm#119
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.

drop column fails when foreign keys are enabled

1 participant