migrations: add FTS tables + view for querying example words

This commit is contained in:
2025-05-15 13:03:48 +02:00
parent b07fc8f4b3
commit 30d8160698
7 changed files with 75 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
CREATE VIRTUAL TABLE "JMdict_KanjiElementFTS" USING FTS5("entryId" UNINDEXED, "reading");
CREATE TRIGGER "JMdict_KanjiElement_InsertFTS"
AFTER INSERT ON "JMdict_KanjiElement"
BEGIN
INSERT INTO "JMdict_KanjiElementFTS"("entryId", "reading")
VALUES (NEW."entryId", NEW."reading");
END;
CREATE TRIGGER "JMdict_KanjiElement_UpdateFTS"
AFTER UPDATE OF "entryId", "reading"
ON "JMdict_KanjiElement"
BEGIN
UPDATE "JMdict_KanjiElementFTS"
SET
"entryId" = NEW."entryId",
"reading" = NEW."reading"
WHERE "entryId" = OLD."entryId";
END;
CREATE TRIGGER "JMdict_KanjiElement_DeleteFTS"
AFTER DELETE ON "JMdict_KanjiElement"
BEGIN
DELETE FROM "JMdict_KanjiElementFTS"
WHERE "entryId" = OLD."entryId";
END;
CREATE VIRTUAL TABLE "JMdict_ReadingElementFTS" USING FTS5("entryId" UNINDEXED, "reading");
CREATE TRIGGER "JMdict_ReadingElement_InsertFTS"
AFTER INSERT ON "JMdict_ReadingElement"
BEGIN
INSERT INTO "JMdict_ReadingElementFTS"("entryId", "reading")
VALUES (NEW."entryId", NEW."reading");
END;
CREATE TRIGGER "JMdict_ReadingElement_UpdateFTS"
AFTER UPDATE OF "entryId", "reading"
ON "JMdict_ReadingElement"
BEGIN
UPDATE "JMdict_ReadingElementFTS"
SET
"entryId" = NEW."entryId",
"reading" = NEW."reading"
WHERE "entryId" = OLD."entryId";
END;
CREATE TRIGGER "JMdict_ReadingElement_DeleteFTS"
AFTER DELETE ON "JMdict_ReadingElement"
BEGIN
DELETE FROM "JMdict_ReadingElementFTS"
WHERE "entryId" = OLD."entryId";
END;

20
migrations/0009_Views.sql Normal file
View File

@@ -0,0 +1,20 @@
-- TODO: Make it possible to match words that contain the
-- kanji as an infix
CREATE VIEW "KANJIDIC_ExampleEntries"("kanji", "entryId")
AS
SELECT
"JMdict_KanjiElement"."entryId",
"KANJIDIC_Character"."literal" AS "kanji",
"JMdict_KanjiElement"."reading"
FROM
"KANJIDIC_Character"
JOIN "JMdict_KanjiElementFTS"
ON "JMdict_KanjiElementFTS"."reading" MATCH "KANJIDIC_Character"."literal" || '*'
JOIN "JMdict_KanjiElement"
ON "JMdict_KanjiElementFTS"."entryId" = "JMdict_KanjiElement"."entryId"
AND "JMdict_KanjiElementFTS"."reading" LIKE '%' || "JMdict_KanjiElement"."reading"
WHERE "JMdict_KanjiElement".news = 1
OR "JMdict_KanjiElement".ichi = 1
OR "JMdict_KanjiElement".spec = 1
OR "JMdict_KanjiElement".gai = 1;