28 lines · 1.1 KB
-- signing_keys moves to AccountState; signing_key_ids stays in D1 as the fingerprint/key id -> owner directory,
-- without a foreign key into the moved table. SSH keys get one row each (key_id = fingerprint).
CREATE TABLE signing_key_ids_new (
  key_id TEXT NOT NULL,
  fingerprint TEXT NOT NULL,
  signing_key_id TEXT NOT NULL,
  user_id TEXT NOT NULL,
  PRIMARY KEY (fingerprint, signing_key_id)
);

INSERT OR IGNORE INTO signing_key_ids_new (key_id, fingerprint, signing_key_id, user_id)
SELECT i.key_id, i.fingerprint, i.signing_key_id, k.user_id
FROM signing_key_ids i JOIN signing_keys k ON k.id = i.signing_key_id
ORDER BY k.created_at;

INSERT OR IGNORE INTO signing_key_ids_new (key_id, fingerprint, signing_key_id, user_id)
SELECT fingerprint, fingerprint, id, user_id FROM signing_keys WHERE kind = 'ssh' ORDER BY created_at;

DROP TABLE signing_key_ids;

ALTER TABLE signing_key_ids_new RENAME TO signing_key_ids;

CREATE INDEX signing_key_ids_key_id ON signing_key_ids(key_id);

CREATE INDEX signing_key_ids_signing_key ON signing_key_ids(signing_key_id);

CREATE INDEX signing_key_ids_user ON signing_key_ids(user_id);