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.
27 lines
1 KiB
SQL
27 lines
1 KiB
SQL
-- 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;
|