summaryrefslogtreecommitdiff
path: root/migrations/20250323190045_rename_login_to_user.sql
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-03-23 15:33:23 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-03-23 15:33:23 -0400
commit7e15690d54ff849596401b43d163df9353062850 (patch)
tree082557e48a3bb6d38ed077b256348f76ff94f67b /migrations/20250323190045_rename_login_to_user.sql
parent7954fbf8113e4a5ced8b61b49fbf51d353034cba (diff)
Rename `user` to `login` at the database.
Diffstat (limited to 'migrations/20250323190045_rename_login_to_user.sql')
-rw-r--r--migrations/20250323190045_rename_login_to_user.sql151
1 files changed, 151 insertions, 0 deletions
diff --git a/migrations/20250323190045_rename_login_to_user.sql b/migrations/20250323190045_rename_login_to_user.sql
new file mode 100644
index 0000000..7b5861d
--- /dev/null
+++ b/migrations/20250323190045_rename_login_to_user.sql
@@ -0,0 +1,151 @@
+-- message
+-- message_deleted
+
+-- Set up the new `user` table, and copy existing logins into it
+create table user
+(
+ id text
+ not null
+ primary key,
+ display_name text
+ not null,
+ canonical_name text
+ not null
+ unique,
+ password_hash text
+ not null,
+ created_sequence bigint
+ unique
+ not null,
+ created_at text
+ not null
+);
+
+insert into user (id, display_name, canonical_name, password_hash, created_sequence, created_at)
+select id, display_name, canonical_name, password_hash, created_sequence, created_at
+from login;
+
+-- Carry the rename through `token`, preserving data…
+alter table token
+ rename to old_token;
+
+create table token
+(
+ id text
+ not null
+ primary key,
+ secret text
+ not null
+ unique,
+ user text
+ not null,
+ issued_at text
+ not null,
+ last_used_at text
+ not null,
+ foreign key (user)
+ references user (id)
+);
+
+insert into token (id, secret, user, issued_at, last_used_at)
+select id, secret, login, issued_at, last_used_at
+from old_token;
+
+-- Carry the rename through `invite`, preserving data…
+alter table invite
+ rename to old_invite;
+
+create table invite
+(
+ id text
+ primary key
+ not null,
+ issuer text
+ not null
+ references user (id),
+ issued_at text
+ not null
+);
+
+insert into invite (id, issuer, issued_at)
+select id, issuer, issued_at
+from old_invite;
+
+-- Carry the rename through `message`, preserving data…
+alter table message
+ rename to old_message;
+
+create table message
+(
+ id text
+ not null
+ primary key,
+ channel text
+ not null
+ references channel (id),
+ sender text
+ not null
+ references user (id),
+ sent_sequence bigint
+ unique
+ not null,
+ sent_at text
+ not null,
+ body text
+ null,
+ last_sequence bigint
+ not null
+);
+
+insert into message (id, channel, sender, sent_sequence, sent_at, body, last_sequence)
+select id, channel, sender, sent_sequence, sent_at, body, last_sequence
+from old_message;
+
+-- Recreating `message` entails recreating `message_deleted`
+alter table message_deleted
+ rename to old_message_deleted;
+
+create table message_deleted
+(
+ id text
+ not null
+ primary key
+ references message (id),
+ deleted_sequence bigint
+ unique
+ not null,
+ deleted_at text
+ not null
+);
+
+insert into message_deleted (id, deleted_sequence, deleted_at)
+select id, deleted_sequence, deleted_at
+from old_message_deleted;
+
+-- Delete old tables (which will take old indices with them)
+drop table old_message_deleted;
+drop table old_message;
+drop table old_invite;
+drop table old_token;
+drop table login;
+
+-- Recreate indices
+create index message_deleted_deleted_at
+ on message_deleted (deleted_at);
+
+create index message_sent_at
+ on message (sent_at);
+create index message_channel
+ on message (channel);
+create index message_last_sequence
+ on message (last_sequence);
+
+create index invite_issued_at
+ on invite (issued_at);
+
+create index token_issued_at
+ on token (issued_at);
+create index token_last_used_at
+ on token (last_used_at);
+create index token_user
+ on token (user);