use tauri_plugin_sql::{Migration, MigrationKind}; pub struct YomitanSearch; impl YomitanSearch { pub fn migrations() -> Vec { vec![ Migration { version: 1, description: "create yomitan dict-version tables", sql: " CREATE TABLE dict ( id INTEGER PRIMARY KEY, title TEXT NOT NULL, revision TEXT NOT NULL, author TEXT, url TEXT, description TEXT, sort_order INTEGER NOT NULL DEFAULT 0, installed_at TEXT NOT NULL DEFAULT (datetime('now')), bundle_name TEXT, -- custom lang TEXT NOT NULL, -- custom asset_count INTEGER, -- custom source TEXT, -- custom UNIQUE (title, revision) ); ", kind: MigrationKind::Up, }, Migration { version: 1, description: "create yomitan ja query tables", sql: " CREATE TABLE ja_search ( id INTEGER NOT NULL, -- yomitan.terms.id OR yomitan dups OR -user.terms.id dict_id INTEGER NOT NULL REFERENCES dict(id) ON DELETE CASCADE, term TEXT NOT NULL, -- normalized term_seg TEXT, -- segmented and filtered for fillers reading TEXT NOT NULL, -- normalized frequency INTEGER, PRIMARY KEY (id, dict_id) ); CREATE INDEX ja_search_term ON ja_search (term); CREATE INDEX ja_search_reading ON ja_search (reading); CREATE INDEX ja_search_frequency ON ja_search (frequency DESC); CREATE VIRTUAL TABLE IF NOT EXISTS ja_search_ft USING fts5 ( term_seg, content='ja_search', content_rowid='rowid', tokenize=unicode61 ); CREATE TRIGGER t_ja_search_ft_after_insert AFTER INSERT ON ja_search BEGIN INSERT INTO ja_search_ft (rowid, term_seg) VALUES (NEW.rowid, NEW.term_seg); END; CREATE TRIGGER t_ja_search_ft_after_delete AFTER DELETE ON ja_search BEGIN INSERT INTO ja_search_ft (ja_search_ft, rowid, term_seg) VALUES ('delete', OLD.rowid, OLD.term_seg); END; CREATE TRIGGER t_ja_search_ft_after_update AFTER UPDATE ON ja_search BEGIN INSERT INTO ja_search_ft (ja_search_ft, rowid, term_seg) VALUES ('delete', OLD.rowid, OLD.term_seg); INSERT INTO ja_search_ft (rowid, term_seg) VALUES (NEW.rowid, NEW.term_seg); END; ", kind: MigrationKind::Up } ] } }