-- 0003_search.sql — full-text search over items. -- -- FTS5 with an external content table: the index stores no copy of the text, -- it points back at media_items, so the database does not double in size. -- Triggers keep the index in sync for every write path, including the scanner's -- bulk inserts and any future module's. CREATE VIRTUAL TABLE media_search USING fts5( title, path, content='media_items', content_rowid='id', tokenize='unicode61 remove_diacritics 2' ); -- Populate the index from any rows that already exist. INSERT INTO media_search(media_search) VALUES ('rebuild'); CREATE TRIGGER media_items_ai AFTER INSERT ON media_items BEGIN INSERT INTO media_search(rowid, title, path) VALUES (new.id, new.title, new.path); END; CREATE TRIGGER media_items_ad AFTER DELETE ON media_items BEGIN INSERT INTO media_search(media_search, rowid, title, path) VALUES ('delete', old.id, old.title, old.path); END; CREATE TRIGGER media_items_au AFTER UPDATE ON media_items BEGIN INSERT INTO media_search(media_search, rowid, title, path) VALUES ('delete', old.id, old.title, old.path); INSERT INTO media_search(rowid, title, path) VALUES (new.id, new.title, new.path); END;