From 772484df59abfa0ac1227a1c435042fdc8a48d80 Mon Sep 17 00:00:00 2001 From: Dilwoar Hussain Date: Thu, 2 Jul 2026 16:06:01 +0100 Subject: [PATCH] Add migration to enforce NOT NULL constraint on notification_status and create unique index on notifications --- migrations/.current-alembic-head | 2 +- .../0554_add_notif_status_constraint.py | 23 ++++++++++++++++++ .../0555_add_notify_status_not_null.py | 20 ++++++++++++++++ .../versions/0556_add_notify_status_idx.py | 24 +++++++++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 migrations/versions/0554_add_notif_status_constraint.py create mode 100644 migrations/versions/0555_add_notify_status_not_null.py create mode 100644 migrations/versions/0556_add_notify_status_idx.py diff --git a/migrations/.current-alembic-head b/migrations/.current-alembic-head index 4bbc2ccd04..ce42232e7a 100644 --- a/migrations/.current-alembic-head +++ b/migrations/.current-alembic-head @@ -1 +1 @@ -0553_add_reason_to_provider +0556_add_notify_status_idx diff --git a/migrations/versions/0554_add_notif_status_constraint.py b/migrations/versions/0554_add_notif_status_constraint.py new file mode 100644 index 0000000000..e6537a907a --- /dev/null +++ b/migrations/versions/0554_add_notif_status_constraint.py @@ -0,0 +1,23 @@ +""" +Create Date: 2026-07-20T00:00:00 +""" + +from alembic import op + +revision = "0554_add_notif_status_constraint" +down_revision = "0553_add_reason_to_provider" + + +def upgrade(): + op.execute( + "-- squawk-ignore require-timeout-settings\n" + "ALTER TABLE notifications " + "ADD CONSTRAINT ck_notifications_notification_status_not_null " + "CHECK (notification_status IS NOT NULL) NOT VALID;" + ) + + +def downgrade(): + op.execute( + "ALTER TABLE notifications DROP CONSTRAINT IF EXISTS ck_notifications_notification_status_not_null;" + ) diff --git a/migrations/versions/0555_add_notify_status_not_null.py b/migrations/versions/0555_add_notify_status_not_null.py new file mode 100644 index 0000000000..23a5096c3c --- /dev/null +++ b/migrations/versions/0555_add_notify_status_not_null.py @@ -0,0 +1,20 @@ +""" +Create Date: 2026-07-20T00:00:00 +""" + +from alembic import op + +revision = "0555_add_notify_status_not_null" +down_revision = "0554_add_notif_status_constraint" + + +def upgrade(): + op.execute( + "ALTER TABLE notifications " + "VALIDATE CONSTRAINT ck_notifications_notification_status_not_null;" + ) + op.execute("ALTER TABLE notifications ALTER COLUMN notification_status SET NOT NULL;") + + +def downgrade(): + op.execute("ALTER TABLE notifications ALTER COLUMN notification_status DROP NOT NULL;") diff --git a/migrations/versions/0556_add_notify_status_idx.py b/migrations/versions/0556_add_notify_status_idx.py new file mode 100644 index 0000000000..de04d3820a --- /dev/null +++ b/migrations/versions/0556_add_notify_status_idx.py @@ -0,0 +1,24 @@ +""" +Create Date: 2026-07-20T00:00:00 +""" + +from alembic import op + +revision = "0556_add_notify_status_idx" +down_revision = "0555_add_notify_status_not_null" + + +def upgrade(): + with op.get_context().autocommit_block(): + op.execute( + "CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS " + "ix_notifications_id_status " + "ON notifications (id, notification_status);" + ) + + +def downgrade(): + with op.get_context().autocommit_block(): + op.execute( + "DROP INDEX CONCURRENTLY IF EXISTS ix_notifications_id_status;" + )