Remove separate attachment table. Fixes #8
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
-- v0 -> v3: Latest revision
|
||||
-- v0 -> v4: Latest revision
|
||||
|
||||
CREATE TABLE guild (
|
||||
dcid TEXT PRIMARY KEY,
|
||||
@@ -90,6 +90,8 @@ CREATE TABLE user_portal (
|
||||
|
||||
CREATE TABLE message (
|
||||
dcid TEXT,
|
||||
dc_attachment_id TEXT,
|
||||
dc_edit_index INTEGER,
|
||||
dc_chan_id TEXT,
|
||||
dc_chan_receiver TEXT,
|
||||
dc_sender TEXT NOT NULL,
|
||||
@@ -98,7 +100,7 @@ CREATE TABLE message (
|
||||
|
||||
mxid TEXT NOT NULL UNIQUE,
|
||||
|
||||
PRIMARY KEY (dcid, dc_chan_id, dc_chan_receiver),
|
||||
PRIMARY KEY (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver),
|
||||
CONSTRAINT message_portal_fkey FOREIGN KEY (dc_chan_id, dc_chan_receiver) REFERENCES portal (dcid, receiver) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
@@ -110,10 +112,13 @@ CREATE TABLE reaction (
|
||||
dc_emoji_name TEXT,
|
||||
dc_thread_id TEXT,
|
||||
|
||||
dc_first_attachment_id TEXT NOT NULL,
|
||||
_dc_first_edit_index INTEGER NOT NULL DEFAULT 0,
|
||||
|
||||
mxid TEXT NOT NULL UNIQUE,
|
||||
|
||||
PRIMARY KEY (dc_chan_id, dc_chan_receiver, dc_msg_id, dc_sender, dc_emoji_name),
|
||||
CONSTRAINT reaction_message_fkey FOREIGN KEY (dc_msg_id, dc_chan_id, dc_chan_receiver) REFERENCES message (dcid, dc_chan_id, dc_chan_receiver) ON DELETE CASCADE
|
||||
CONSTRAINT reaction_message_fkey FOREIGN KEY (dc_msg_id, dc_first_attachment_id, _dc_first_edit_index, dc_chan_id, dc_chan_receiver) REFERENCES message (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE attachment (
|
||||
|
||||
20
database/upgrades/04-attachment-fix.sql
Normal file
20
database/upgrades/04-attachment-fix.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- v4: Fix storing attachments
|
||||
ALTER TABLE reaction DROP CONSTRAINT reaction_message_fkey;
|
||||
ALTER TABLE attachment DROP CONSTRAINT attachment_message_fkey;
|
||||
ALTER TABLE message DROP CONSTRAINT message_pkey;
|
||||
ALTER TABLE message ADD COLUMN dc_attachment_id TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE message ADD COLUMN dc_edit_index INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE message ALTER COLUMN dc_attachment_id DROP DEFAULT;
|
||||
ALTER TABLE message ALTER COLUMN dc_edit_index DROP DEFAULT;
|
||||
ALTER TABLE message ADD PRIMARY KEY (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver);
|
||||
INSERT INTO message (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver, dc_sender, timestamp, dc_thread_id, mxid)
|
||||
SELECT message.dcid, attachment.dcid, 0, attachment.dc_chan_id, attachment.dc_chan_receiver, message.dc_sender, message.timestamp, attachment.dc_thread_id, attachment.mxid
|
||||
FROM attachment LEFT JOIN message ON attachment.dc_msg_id = message.dcid;
|
||||
DROP TABLE attachment;
|
||||
|
||||
ALTER TABLE reaction ADD COLUMN dc_first_attachment_id TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE reaction ALTER COLUMN dc_first_attachment_id DROP DEFAULT;
|
||||
ALTER TABLE reaction ADD COLUMN _dc_first_edit_index INTEGER DEFAULT 0;
|
||||
ALTER TABLE reaction ADD CONSTRAINT reaction_message_fkey
|
||||
FOREIGN KEY (dc_msg_id, dc_first_attachment_id, _dc_first_edit_index, dc_chan_id, dc_chan_receiver)
|
||||
REFERENCES message(dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver);
|
||||
Reference in New Issue
Block a user