Store edit timestamp in database to deduplicate edits. Fixes #86
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
-- v0 -> v18 (compatible with v15+): Latest revision
|
||||
-- v0 -> v19: Latest revision
|
||||
|
||||
CREATE TABLE guild (
|
||||
dcid TEXT PRIMARY KEY,
|
||||
@@ -104,18 +104,18 @@ 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,
|
||||
timestamp BIGINT NOT NULL,
|
||||
dc_thread_id TEXT NOT NULL,
|
||||
dcid TEXT,
|
||||
dc_attachment_id TEXT,
|
||||
dc_chan_id TEXT,
|
||||
dc_chan_receiver TEXT,
|
||||
dc_sender TEXT NOT NULL,
|
||||
timestamp BIGINT NOT NULL,
|
||||
dc_edit_timestamp BIGINT NOT NULL,
|
||||
dc_thread_id TEXT NOT NULL,
|
||||
|
||||
mxid TEXT NOT NULL UNIQUE,
|
||||
|
||||
PRIMARY KEY (dcid, dc_attachment_id, dc_edit_index, dc_chan_id, dc_chan_receiver),
|
||||
PRIMARY KEY (dcid, dc_attachment_id, 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
|
||||
);
|
||||
|
||||
@@ -127,13 +127,12 @@ CREATE TABLE reaction (
|
||||
dc_emoji_name TEXT,
|
||||
dc_thread_id TEXT NOT NULL,
|
||||
|
||||
dc_first_attachment_id TEXT NOT NULL,
|
||||
_dc_first_edit_index INTEGER NOT NULL DEFAULT 0,
|
||||
dc_first_attachment_id TEXT NOT NULL,
|
||||
|
||||
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_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
|
||||
CONSTRAINT reaction_message_fkey FOREIGN KEY (dc_msg_id, dc_first_attachment_id, dc_chan_id, dc_chan_receiver) REFERENCES message (dcid, dc_attachment_id, dc_chan_id, dc_chan_receiver) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE role (
|
||||
|
||||
15
database/upgrades/19-message-edit-ts.postgres.sql
Normal file
15
database/upgrades/19-message-edit-ts.postgres.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
-- v19: Replace dc_edit_index with dc_edit_timestamp
|
||||
-- transaction: off
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE reaction DROP CONSTRAINT reaction_message_fkey;
|
||||
ALTER TABLE message DROP CONSTRAINT message_pkey;
|
||||
ALTER TABLE message DROP COLUMN dc_edit_index;
|
||||
ALTER TABLE reaction DROP COLUMN _dc_first_edit_index;
|
||||
ALTER TABLE message ADD PRIMARY KEY (dcid, dc_attachment_id, dc_chan_id, dc_chan_receiver);
|
||||
ALTER TABLE reaction ADD CONSTRAINT reaction_message_fkey FOREIGN KEY (dc_msg_id, dc_first_attachment_id, dc_chan_id, dc_chan_receiver) REFERENCES message (dcid, dc_attachment_id, dc_chan_id, dc_chan_receiver) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE message ADD COLUMN dc_edit_timestamp BIGINT NOT NULL DEFAULT 0;
|
||||
ALTER TABLE message ALTER COLUMN dc_edit_timestamp DROP DEFAULT;
|
||||
|
||||
COMMIT;
|
||||
48
database/upgrades/19-message-edit-ts.sqlite.sql
Normal file
48
database/upgrades/19-message-edit-ts.sqlite.sql
Normal file
@@ -0,0 +1,48 @@
|
||||
-- v19: Replace dc_edit_index with dc_edit_timestamp
|
||||
-- transaction: off
|
||||
PRAGMA foreign_keys = OFF;
|
||||
BEGIN;
|
||||
|
||||
CREATE TABLE message_new (
|
||||
dcid TEXT,
|
||||
dc_attachment_id TEXT,
|
||||
dc_chan_id TEXT,
|
||||
dc_chan_receiver TEXT,
|
||||
dc_sender TEXT NOT NULL,
|
||||
timestamp BIGINT NOT NULL,
|
||||
dc_edit_timestamp BIGINT NOT NULL,
|
||||
dc_thread_id TEXT NOT NULL,
|
||||
|
||||
mxid TEXT NOT NULL UNIQUE,
|
||||
|
||||
PRIMARY KEY (dcid, dc_attachment_id, 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
|
||||
);
|
||||
INSERT INTO message_new (dcid, dc_attachment_id, dc_chan_id, dc_chan_receiver, dc_sender, timestamp, dc_edit_timestamp, dc_thread_id, mxid)
|
||||
SELECT dcid, dc_attachment_id, dc_chan_id, dc_chan_receiver, dc_sender, timestamp, 0, dc_thread_id, mxid FROM message;
|
||||
DROP TABLE message;
|
||||
ALTER TABLE message_new RENAME TO message;
|
||||
|
||||
CREATE TABLE reaction_new (
|
||||
dc_chan_id TEXT,
|
||||
dc_chan_receiver TEXT,
|
||||
dc_msg_id TEXT,
|
||||
dc_sender TEXT,
|
||||
dc_emoji_name TEXT,
|
||||
dc_thread_id TEXT NOT NULL,
|
||||
|
||||
dc_first_attachment_id TEXT NOT NULL,
|
||||
|
||||
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_first_attachment_id, dc_chan_id, dc_chan_receiver) REFERENCES message (dcid, dc_attachment_id, dc_chan_id, dc_chan_receiver) ON DELETE CASCADE
|
||||
);
|
||||
INSERT INTO reaction_new (dc_chan_id, dc_chan_receiver, dc_msg_id, dc_sender, dc_emoji_name, dc_thread_id, dc_first_attachment_id, mxid)
|
||||
SELECT dc_chan_id, dc_chan_receiver, dc_msg_id, dc_sender, dc_emoji_name, dc_thread_id, dc_first_attachment_id, mxid FROM reaction;
|
||||
DROP TABLE reaction;
|
||||
ALTER TABLE reaction_new RENAME TO reaction;
|
||||
|
||||
PRAGMA foreign_key_check;
|
||||
COMMIT;
|
||||
PRAGMA foreign_keys = ON;
|
||||
Reference in New Issue
Block a user