Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions internal/plan/rewrite.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,10 @@ func generateColumnNotNullRewrite(_ *diff.ColumnDiff, path string) []RewriteStep
setNotNullSQL := fmt.Sprintf("ALTER TABLE %s ALTER COLUMN %s SET NOT NULL;",
tableName, column)

// Step 4: Drop CHECK constraint
dropConstraintSQL := fmt.Sprintf("ALTER TABLE %s DROP CONSTRAINT %s;",
tableName, ir.QuoteIdentifier(constraintName))

return []RewriteStep{
{
SQL: addConstraintSQL,
Expand All @@ -306,6 +310,10 @@ func generateColumnNotNullRewrite(_ *diff.ColumnDiff, path string) []RewriteStep
SQL: setNotNullSQL,
CanRunInTransaction: true,
},
{
SQL: dropConstraintSQL,
CanRunInTransaction: true,
},
}
}

Expand Down
6 changes: 6 additions & 0 deletions testdata/diff/online/add_not_null/plan.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@
"type": "table.column",
"operation": "alter",
"path": "public.users.email"
},
{
"sql": "ALTER TABLE users DROP CONSTRAINT email_not_null;",
"type": "table.column",
"operation": "alter",
"path": "public.users.email"
}
]
}
Expand Down
2 changes: 2 additions & 0 deletions testdata/diff/online/add_not_null/plan.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ ALTER TABLE users ADD CONSTRAINT email_not_null CHECK (email IS NOT NULL) NOT VA
ALTER TABLE users VALIDATE CONSTRAINT email_not_null;

ALTER TABLE users ALTER COLUMN email SET NOT NULL;

ALTER TABLE users DROP CONSTRAINT email_not_null;
2 changes: 2 additions & 0 deletions testdata/diff/online/add_not_null/plan.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,5 @@ ALTER TABLE users ADD CONSTRAINT email_not_null CHECK (email IS NOT NULL) NOT VA
ALTER TABLE users VALIDATE CONSTRAINT email_not_null;

ALTER TABLE users ALTER COLUMN email SET NOT NULL;

ALTER TABLE users DROP CONSTRAINT email_not_null;
Loading