From d67feec71319c47be06d4abaaf41666bc7984b91 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Fri, 20 Dec 2024 16:12:40 +1300 Subject: [PATCH] Fix(db): Remove unused FOREIGN KEY REFERENCES in message_tags table (#374) This SQL patch rebuilds the message_tags table to remove the unused ID & TagID REFERENCES that was sometimes causing FOREIGN KEY errors when deleting messages (with tags) using the rqlite database. This is not a bug in rqlite, but rather a limitation of how Mailpit integrated with rqlite as an optional alternative database. --- internal/storage/schemas/1.21.8.sql | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 internal/storage/schemas/1.21.8.sql diff --git a/internal/storage/schemas/1.21.8.sql b/internal/storage/schemas/1.21.8.sql new file mode 100644 index 0000000..d2083b4 --- /dev/null +++ b/internal/storage/schemas/1.21.8.sql @@ -0,0 +1,22 @@ +-- Rebuild message_tags to remove FOREIGN KEY REFERENCES +PRAGMA foreign_keys=OFF; + +DROP INDEX IF EXISTS {{ tenant "idx_message_tag_id" }}; +DROP INDEX IF EXISTS {{ tenant "idx_message_tag_tagid" }}; + +ALTER TABLE {{ tenant "message_tags" }} RENAME TO _{{ tenant "message_tags" }}_old; + +CREATE TABLE IF NOT EXISTS {{ tenant "message_tags" }} ( + Key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + ID TEXT NOT NULL, + TagID INTEGER NOT NULL +); + +CREATE INDEX IF NOT EXISTS {{ tenant "idx_message_tags_id" }} ON {{ tenant "message_tags" }} (ID); +CREATE INDEX IF NOT EXISTS {{ tenant "idx_message_tags_tagid" }} ON {{ tenant "message_tags" }} (TagID); + +INSERT INTO {{ tenant "message_tags" }} SELECT * FROM _{{ tenant "message_tags" }}_old; + +DROP TABLE IF EXISTS _{{ tenant "message_tags" }}_old; + +PRAGMA foreign_keys=ON;