fix(seahorse): drop/recreate FTS5 triggers so existing DBs get corrected bodies

`CREATE TRIGGER IF NOT EXISTS` does not replace an existing trigger body.
On databases created with the old (buggy) DELETE-FROM-FTS syntax, the
bad trigger body persisted after code updates. Now we explicitly DROP
each trigger before CREATE, so any existing DB gets the corrected body
on next startup — no manual DB deletion required.
This commit is contained in:
Liu Yuan
2026-04-13 11:29:02 +08:00
parent f7e768152e
commit b8819bdbff
+15 -6
View File
@@ -118,26 +118,35 @@ func runSchema(db *sql.DB) error {
`CREATE INDEX IF NOT EXISTS idx_summary_messages_message ON summary_messages(message_id)`,
`CREATE INDEX IF NOT EXISTS idx_context_items_conv ON context_items(conversation_id, ordinal)`,
// Drop old triggers before creating new ones so existing DBs get updated bodies.
// (CREATE TRIGGER IF NOT EXISTS does NOT replace an existing trigger body.)
`DROP TRIGGER IF EXISTS summaries_ai`,
`DROP TRIGGER IF EXISTS summaries_ad`,
`DROP TRIGGER IF EXISTS summaries_au`,
`DROP TRIGGER IF EXISTS messages_ai`,
`DROP TRIGGER IF EXISTS messages_ad`,
`DROP TRIGGER IF EXISTS messages_au`,
// FTS5 triggers to keep summaries_fts in sync with summaries table
`CREATE TRIGGER IF NOT EXISTS summaries_ai AFTER INSERT ON summaries BEGIN
`CREATE TRIGGER summaries_ai AFTER INSERT ON summaries BEGIN
INSERT INTO summaries_fts (summary_id, content) VALUES (new.summary_id, new.content);
END`,
`CREATE TRIGGER IF NOT EXISTS summaries_ad AFTER DELETE ON summaries BEGIN
`CREATE TRIGGER summaries_ad AFTER DELETE ON summaries BEGIN
DELETE FROM summaries_fts WHERE summary_id = old.summary_id;
END`,
`CREATE TRIGGER IF NOT EXISTS summaries_au AFTER UPDATE ON summaries BEGIN
`CREATE TRIGGER summaries_au AFTER UPDATE ON summaries BEGIN
DELETE FROM summaries_fts WHERE summary_id = old.summary_id;
INSERT INTO summaries_fts (summary_id, content) VALUES (new.summary_id, new.content);
END`,
// FTS5 triggers to keep messages_fts in sync with messages table
`CREATE TRIGGER IF NOT EXISTS messages_ai AFTER INSERT ON messages BEGIN
`CREATE TRIGGER messages_ai AFTER INSERT ON messages BEGIN
INSERT INTO messages_fts (message_id, content) VALUES (new.message_id, new.content);
END`,
`CREATE TRIGGER IF NOT EXISTS messages_ad AFTER DELETE ON messages BEGIN
`CREATE TRIGGER messages_ad AFTER DELETE ON messages BEGIN
DELETE FROM messages_fts WHERE message_id = old.message_id;
END`,
`CREATE TRIGGER IF NOT EXISTS messages_au AFTER UPDATE ON messages BEGIN
`CREATE TRIGGER messages_au AFTER UPDATE ON messages BEGIN
DELETE FROM messages_fts WHERE message_id = old.message_id;
INSERT INTO messages_fts (message_id, content) VALUES (new.message_id, new.content);
END`,