fix: add FTS5 sync triggers so recipe inserts are indexed immediately
Migration 015 did a one-time rebuild of recipes_fts at creation time but omitted triggers, so rows inserted after that point were invisible to MATCH queries. Adds AFTER INSERT/UPDATE/DELETE triggers to 015 (fresh DBs / tests) and migration 016 to backfill them on existing databases. Fixes 3 failing tests: test_search_recipes_by_ingredient_names, test_level1_returns_ranked_suggestions, test_level2_returns_swap_candidates.
This commit is contained in:
parent
dda8be48c9
commit
dd09aa21f4
2 changed files with 49 additions and 0 deletions
|
|
@ -14,3 +14,25 @@ CREATE VIRTUAL TABLE IF NOT EXISTS recipes_fts USING fts5(
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO recipes_fts(recipes_fts) VALUES('rebuild');
|
INSERT INTO recipes_fts(recipes_fts) VALUES('rebuild');
|
||||||
|
|
||||||
|
-- Triggers to keep the FTS index in sync with the recipes table.
|
||||||
|
-- Without these, rows inserted after the initial rebuild are invisible to FTS queries.
|
||||||
|
CREATE TRIGGER IF NOT EXISTS recipes_fts_ai
|
||||||
|
AFTER INSERT ON recipes BEGIN
|
||||||
|
INSERT INTO recipes_fts(rowid, ingredient_names)
|
||||||
|
VALUES (new.id, new.ingredient_names);
|
||||||
|
END;
|
||||||
|
|
||||||
|
CREATE TRIGGER IF NOT EXISTS recipes_fts_ad
|
||||||
|
AFTER DELETE ON recipes BEGIN
|
||||||
|
INSERT INTO recipes_fts(recipes_fts, rowid, ingredient_names)
|
||||||
|
VALUES ('delete', old.id, old.ingredient_names);
|
||||||
|
END;
|
||||||
|
|
||||||
|
CREATE TRIGGER IF NOT EXISTS recipes_fts_au
|
||||||
|
AFTER UPDATE ON recipes BEGIN
|
||||||
|
INSERT INTO recipes_fts(recipes_fts, rowid, ingredient_names)
|
||||||
|
VALUES ('delete', old.id, old.ingredient_names);
|
||||||
|
INSERT INTO recipes_fts(rowid, ingredient_names)
|
||||||
|
VALUES (new.id, new.ingredient_names);
|
||||||
|
END;
|
||||||
|
|
|
||||||
27
app/db/migrations/016_recipe_fts_triggers.sql
Normal file
27
app/db/migrations/016_recipe_fts_triggers.sql
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
-- Migration 016: Add FTS5 sync triggers for the recipes_fts content table.
|
||||||
|
--
|
||||||
|
-- Migration 015 created recipes_fts and did a one-time rebuild, but omitted
|
||||||
|
-- triggers. Without them, INSERT/UPDATE/DELETE on recipes does not update the
|
||||||
|
-- FTS index, so new rows are invisible to MATCH queries.
|
||||||
|
--
|
||||||
|
-- CREATE TRIGGER IF NOT EXISTS is idempotent — safe to re-run.
|
||||||
|
|
||||||
|
CREATE TRIGGER IF NOT EXISTS recipes_fts_ai
|
||||||
|
AFTER INSERT ON recipes BEGIN
|
||||||
|
INSERT INTO recipes_fts(rowid, ingredient_names)
|
||||||
|
VALUES (new.id, new.ingredient_names);
|
||||||
|
END;
|
||||||
|
|
||||||
|
CREATE TRIGGER IF NOT EXISTS recipes_fts_ad
|
||||||
|
AFTER DELETE ON recipes BEGIN
|
||||||
|
INSERT INTO recipes_fts(recipes_fts, rowid, ingredient_names)
|
||||||
|
VALUES ('delete', old.id, old.ingredient_names);
|
||||||
|
END;
|
||||||
|
|
||||||
|
CREATE TRIGGER IF NOT EXISTS recipes_fts_au
|
||||||
|
AFTER UPDATE ON recipes BEGIN
|
||||||
|
INSERT INTO recipes_fts(recipes_fts, rowid, ingredient_names)
|
||||||
|
VALUES ('delete', old.id, old.ingredient_names);
|
||||||
|
INSERT INTO recipes_fts(rowid, ingredient_names)
|
||||||
|
VALUES (new.id, new.ingredient_names);
|
||||||
|
END;
|
||||||
Loading…
Reference in a new issue