mautrix-signal/pkg/signalmeow/store/upgrades/10-prekey-store-service-id....

32 lines
2.0 KiB
SQL

-- v10: Change prekey store to use service IDs instead of UUID kind column
ALTER TABLE signalmeow_pre_keys ADD COLUMN service_id TEXT;
UPDATE signalmeow_pre_keys SET service_id=aci_uuid WHERE uuid_kind='aci';
UPDATE signalmeow_pre_keys SET service_id='PNI:' || (
SELECT pni_uuid FROM signalmeow_device WHERE signalmeow_device.aci_uuid=signalmeow_pre_keys.aci_uuid
) WHERE uuid_kind='pni';
ALTER TABLE signalmeow_pre_keys ALTER COLUMN service_id SET NOT NULL;
ALTER TABLE signalmeow_pre_keys DROP CONSTRAINT signalmeow_pre_keys_pkey;
ALTER TABLE signalmeow_pre_keys DROP COLUMN uuid_kind;
ALTER TABLE signalmeow_pre_keys RENAME COLUMN aci_uuid TO account_id;
ALTER TABLE signalmeow_pre_keys ADD PRIMARY KEY (account_id, service_id, is_signed, key_id);
ALTER TABLE signalmeow_pre_keys DROP COLUMN uploaded;
ALTER TABLE signalmeow_kyber_pre_keys ADD COLUMN service_id TEXT;
UPDATE signalmeow_kyber_pre_keys SET service_id=aci_uuid WHERE uuid_kind='aci';
UPDATE signalmeow_kyber_pre_keys SET service_id='PNI:' || (
SELECT pni_uuid FROM signalmeow_device WHERE signalmeow_device.aci_uuid=signalmeow_kyber_pre_keys.aci_uuid
) WHERE uuid_kind='pni';
ALTER TABLE signalmeow_kyber_pre_keys ALTER COLUMN service_id SET NOT NULL;
ALTER TABLE signalmeow_kyber_pre_keys DROP CONSTRAINT signalmeow_kyber_pre_keys_pkey;
ALTER TABLE signalmeow_kyber_pre_keys DROP COLUMN uuid_kind;
ALTER TABLE signalmeow_kyber_pre_keys RENAME COLUMN aci_uuid TO account_id;
ALTER TABLE signalmeow_kyber_pre_keys ADD PRIMARY KEY (account_id, service_id, key_id);
ALTER TABLE signalmeow_sessions ADD COLUMN service_id TEXT;
UPDATE signalmeow_sessions SET service_id=our_aci_uuid; -- there are no PNI sessions yet
ALTER TABLE signalmeow_sessions ALTER COLUMN service_id SET NOT NULL;
ALTER TABLE signalmeow_sessions DROP CONSTRAINT signalmeow_sessions_pkey;
ALTER TABLE signalmeow_sessions RENAME COLUMN our_aci_uuid TO account_id;
ALTER TABLE signalmeow_sessions ADD PRIMARY KEY (account_id, service_id, their_service_id, their_device_id);