From 77532e516d2a59b6b440a869a9aa087cc0df5c1f Mon Sep 17 00:00:00 2001 From: Andrew Ferrazzutti Date: Tue, 12 Mar 2024 09:46:15 -0400 Subject: [PATCH 1/3] Make sqlite-compatible migration step --- ....sql => 08-resync-schema-449-postgres.sql} | 4 +- .../upgrades/09-resync-schema-449-sqlite.sql | 49 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) rename pkg/signalmeow/store/upgrades/{08-resync-schema-449.sql => 08-resync-schema-449-postgres.sql} (93%) create mode 100644 pkg/signalmeow/store/upgrades/09-resync-schema-449-sqlite.sql diff --git a/pkg/signalmeow/store/upgrades/08-resync-schema-449.sql b/pkg/signalmeow/store/upgrades/08-resync-schema-449-postgres.sql similarity index 93% rename from pkg/signalmeow/store/upgrades/08-resync-schema-449.sql rename to pkg/signalmeow/store/upgrades/08-resync-schema-449-postgres.sql index 95af7759..4f7b47eb 100644 --- a/pkg/signalmeow/store/upgrades/08-resync-schema-449.sql +++ b/pkg/signalmeow/store/upgrades/08-resync-schema-449-postgres.sql @@ -1,4 +1,6 @@ --- v7 -> v8: Migration from https://github.com/mautrix/signal/pull/449 to match the new v8 upgrade +-- v7 -> v8: Migration from https://github.com/mautrix/signal/pull/449 to match the new v8 upgrade (Postgres) +-- only: postgres + ALTER TABLE signalmeow_contacts DROP COLUMN profile_avatar_hash; ALTER TABLE signalmeow_contacts RENAME COLUMN profile_fetch_ts TO profile_fetched_at; ALTER TABLE signalmeow_contacts ALTER COLUMN profile_fetched_at DROP DEFAULT; diff --git a/pkg/signalmeow/store/upgrades/09-resync-schema-449-sqlite.sql b/pkg/signalmeow/store/upgrades/09-resync-schema-449-sqlite.sql new file mode 100644 index 00000000..38fbfed2 --- /dev/null +++ b/pkg/signalmeow/store/upgrades/09-resync-schema-449-sqlite.sql @@ -0,0 +1,49 @@ +-- v9: Migration from https://github.com/mautrix/signal/pull/449 to match the new v8 upgrade (SQLite) +-- transaction: off +-- only: sqlite + +-- This is separate from v8 so that postgres can run with transaction: on +-- (split upgrades by dialect don't currently allow disabling transaction in only one dialect) + +PRAGMA foreign_keys = OFF; +BEGIN; + +ALTER TABLE signalmeow_contacts DROP COLUMN profile_avatar_hash; + +CREATE TABLE signalmeow_contacts_new ( + our_aci_uuid TEXT NOT NULL, + aci_uuid TEXT NOT NULL, + e164_number TEXT NOT NULL, + contact_name TEXT NOT NULL, + contact_avatar_hash TEXT NOT NULL, + profile_key bytea, + profile_name TEXT NOT NULL, + profile_about TEXT NOT NULL, + profile_about_emoji TEXT NOT NULL, + profile_avatar_path TEXT NOT NULL, + profile_fetched_at BIGINT, + + PRIMARY KEY (our_aci_uuid, aci_uuid), + FOREIGN KEY (our_aci_uuid) REFERENCES signalmeow_device (aci_uuid) ON DELETE CASCADE ON UPDATE CASCADE +); + +INSERT INTO signalmeow_contacts_new +SELECT our_aci_uuid, + aci_uuid, + e164_number, + contact_name, + contact_avatar_hash, + profile_key, + profile_name, + profile_about, + profile_about_emoji, + profile_avatar_path, + CASE WHEN profile_fetch_ts <= 0 THEN NULL ELSE profile_fetch_ts END +FROM signalmeow_contacts; + +DROP TABLE signalmeow_contacts; +ALTER TABLE signalmeow_contacts_new RENAME TO signalmeow_contacts; + +PRAGMA foreign_key_check; +COMMIT; +PRAGMA foreign_keys = ON; From c0f570673d194523e62be59561e11049538bc98c Mon Sep 17 00:00:00 2001 From: Andrew Ferrazzutti Date: Tue, 12 Mar 2024 10:51:38 -0400 Subject: [PATCH 2/3] Update latest signalmeow revision --- pkg/signalmeow/store/upgrades/00-latest.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/signalmeow/store/upgrades/00-latest.sql b/pkg/signalmeow/store/upgrades/00-latest.sql index 6c7dc4bb..63f4e22e 100644 --- a/pkg/signalmeow/store/upgrades/00-latest.sql +++ b/pkg/signalmeow/store/upgrades/00-latest.sql @@ -1,4 +1,4 @@ --- v0 -> v8: Latest revision +-- v0 -> v9: Latest revision CREATE TABLE signalmeow_device ( aci_uuid TEXT PRIMARY KEY, From c229851cdc8e453c46c6092c16cd6b51571888b4 Mon Sep 17 00:00:00 2001 From: Andrew Ferrazzutti Date: Tue, 12 Mar 2024 11:17:29 -0400 Subject: [PATCH 3/3] Use normal dialect-split upgrade as there are no foreign keys referencing signalmeow_contacts --- pkg/signalmeow/store/upgrades/00-latest.sql | 2 +- ...gres.sql => 08-resync-schema-449.postgres.sql} | 4 +--- ...sqlite.sql => 08-resync-schema-449.sqlite.sql} | 15 +-------------- 3 files changed, 3 insertions(+), 18 deletions(-) rename pkg/signalmeow/store/upgrades/{08-resync-schema-449-postgres.sql => 08-resync-schema-449.postgres.sql} (93%) rename pkg/signalmeow/store/upgrades/{09-resync-schema-449-sqlite.sql => 08-resync-schema-449.sqlite.sql} (74%) diff --git a/pkg/signalmeow/store/upgrades/00-latest.sql b/pkg/signalmeow/store/upgrades/00-latest.sql index 63f4e22e..6c7dc4bb 100644 --- a/pkg/signalmeow/store/upgrades/00-latest.sql +++ b/pkg/signalmeow/store/upgrades/00-latest.sql @@ -1,4 +1,4 @@ --- v0 -> v9: Latest revision +-- v0 -> v8: Latest revision CREATE TABLE signalmeow_device ( aci_uuid TEXT PRIMARY KEY, diff --git a/pkg/signalmeow/store/upgrades/08-resync-schema-449-postgres.sql b/pkg/signalmeow/store/upgrades/08-resync-schema-449.postgres.sql similarity index 93% rename from pkg/signalmeow/store/upgrades/08-resync-schema-449-postgres.sql rename to pkg/signalmeow/store/upgrades/08-resync-schema-449.postgres.sql index 4f7b47eb..95af7759 100644 --- a/pkg/signalmeow/store/upgrades/08-resync-schema-449-postgres.sql +++ b/pkg/signalmeow/store/upgrades/08-resync-schema-449.postgres.sql @@ -1,6 +1,4 @@ --- v7 -> v8: Migration from https://github.com/mautrix/signal/pull/449 to match the new v8 upgrade (Postgres) --- only: postgres - +-- v7 -> v8: Migration from https://github.com/mautrix/signal/pull/449 to match the new v8 upgrade ALTER TABLE signalmeow_contacts DROP COLUMN profile_avatar_hash; ALTER TABLE signalmeow_contacts RENAME COLUMN profile_fetch_ts TO profile_fetched_at; ALTER TABLE signalmeow_contacts ALTER COLUMN profile_fetched_at DROP DEFAULT; diff --git a/pkg/signalmeow/store/upgrades/09-resync-schema-449-sqlite.sql b/pkg/signalmeow/store/upgrades/08-resync-schema-449.sqlite.sql similarity index 74% rename from pkg/signalmeow/store/upgrades/09-resync-schema-449-sqlite.sql rename to pkg/signalmeow/store/upgrades/08-resync-schema-449.sqlite.sql index 38fbfed2..fa09134b 100644 --- a/pkg/signalmeow/store/upgrades/09-resync-schema-449-sqlite.sql +++ b/pkg/signalmeow/store/upgrades/08-resync-schema-449.sqlite.sql @@ -1,13 +1,4 @@ --- v9: Migration from https://github.com/mautrix/signal/pull/449 to match the new v8 upgrade (SQLite) --- transaction: off --- only: sqlite - --- This is separate from v8 so that postgres can run with transaction: on --- (split upgrades by dialect don't currently allow disabling transaction in only one dialect) - -PRAGMA foreign_keys = OFF; -BEGIN; - +-- v7 -> v8: Migration from https://github.com/mautrix/signal/pull/449 to match the new v8 upgrade ALTER TABLE signalmeow_contacts DROP COLUMN profile_avatar_hash; CREATE TABLE signalmeow_contacts_new ( @@ -43,7 +34,3 @@ FROM signalmeow_contacts; DROP TABLE signalmeow_contacts; ALTER TABLE signalmeow_contacts_new RENAME TO signalmeow_contacts; - -PRAGMA foreign_key_check; -COMMIT; -PRAGMA foreign_keys = ON;