From 80b3610a72cb418a0d8be86a489853b8db486074 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Wed, 25 Jun 2025 20:18:27 +0200 Subject: [PATCH] Store `type` enum as `CHAR(1)` --- lib/search/word_search/entry_id_query.dart | 4 ++-- migrations/0005_JMDict_search_index_tables.sql | 10 +++++----- migrations/0010_Views.sql | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/search/word_search/entry_id_query.dart b/lib/search/word_search/entry_id_query.dart index 8eec0ab..759e9df 100644 --- a/lib/search/word_search/entry_id_query.dart +++ b/lib/search/word_search/entry_id_query.dart @@ -60,7 +60,7 @@ String _filterFTSSensitiveCharacters(String word) { JOIN "${tableName}" USING ("elementId") JOIN "JMdict_EntryScore" USING ("elementId") WHERE "${tableName}FTS"."reading" MATCH ? || '*' - AND "JMdict_EntryScore"."type" = '${tableName == JMdictTableNames.kanjiElement ? 'kanji' : 'reading'}' + AND "JMdict_EntryScore"."type" = '${tableName == JMdictTableNames.kanjiElement ? 'k' : 'r'}' ORDER BY "JMdict_EntryScore"."score" DESC ${!countOnly ? 'LIMIT ?' : ''} @@ -75,7 +75,7 @@ String _filterFTSSensitiveCharacters(String word) { JOIN "JMdict_EntryScore" USING ("elementId") WHERE "reading" LIKE '%' || ? || '%' AND "${tableName}"."entryId" NOT IN (SELECT "entryId" FROM "fts_results") - AND "JMdict_EntryScore"."type" = '${tableName == JMdictTableNames.kanjiElement ? 'kanji' : 'reading'}' + AND "JMdict_EntryScore"."type" = '${tableName == JMdictTableNames.kanjiElement ? 'k' : 'r'}' ORDER BY "JMdict_EntryScore"."score" DESC, "${tableName}"."entryId" ASC diff --git a/migrations/0005_JMDict_search_index_tables.sql b/migrations/0005_JMDict_search_index_tables.sql index c2575a9..67eca9f 100644 --- a/migrations/0005_JMDict_search_index_tables.sql +++ b/migrations/0005_JMDict_search_index_tables.sql @@ -1,5 +1,5 @@ CREATE TABLE "JMdict_EntryScore" ( - "type" TEXT NOT NULL CHECK ("type" IN ('reading', 'kanji')), + "type" CHAR(1) NOT NULL CHECK ("type" IN ('r', 'k')), "entryId" INTEGER NOT NULL REFERENCES "JMdict_Entry"("entryId"), "elementId" INTEGER NOT NULL, "score" INTEGER NOT NULL DEFAULT 0, @@ -20,7 +20,7 @@ CREATE INDEX "JMdict_EntryScore_byType_byCommon" ON "JMdict_EntryScore"("type", CREATE VIEW "JMdict_EntryScoreView_Reading" AS SELECT - 'reading' AS "type", + 'r' AS "type", "JMdict_ReadingElement"."entryId", "JMdict_ReadingElement"."elementId", ( @@ -52,7 +52,7 @@ LEFT JOIN "JMdict_JLPTTag" USING ("entryId"); CREATE VIEW "JMdict_EntryScoreView_Kanji" AS SELECT - 'kanji' AS "type", + 'k' AS "type", "JMdict_KanjiElement"."entryId", "JMdict_KanjiElement"."elementId", ( @@ -123,7 +123,7 @@ CREATE TRIGGER "JMdict_EntryScore_Delete_JMdict_ReadingElement" AFTER DELETE ON "JMdict_ReadingElement" BEGIN DELETE FROM "JMdict_EntryScore" - WHERE "type" = 'reading' + WHERE "type" = 'r' AND "elementId" = OLD."elementId"; END; @@ -160,7 +160,7 @@ CREATE TRIGGER "JMdict_EntryScore_Delete_JMdict_KanjiElement" AFTER DELETE ON "JMdict_KanjiElement" BEGIN DELETE FROM "JMdict_EntryScore" - WHERE "type" = 'kanji' + WHERE "type" = 'k' AND "elementId" = OLD."elementId"; END; diff --git a/migrations/0010_Views.sql b/migrations/0010_Views.sql index a3d0214..f7bd416 100644 --- a/migrations/0010_Views.sql +++ b/migrations/0010_Views.sql @@ -65,7 +65,7 @@ JOIN "JMdict_KanjiElement" ON "JMdict_KanjiElementFTS"."entryId" = "JMdict_KanjiElement"."entryId" AND "JMdict_KanjiElementFTS"."reading" LIKE '%' || "JMdict_KanjiElement"."reading" JOIN "JMdict_EntryScore" - ON "JMdict_EntryScore"."type" = 'kanji' + ON "JMdict_EntryScore"."type" = 'k' AND "JMdict_KanjiElement"."entryId" = "JMdict_EntryScore"."entryId" AND "JMdict_KanjiElement"."reading" = "JMdict_EntryScore"."reading" WHERE "JMdict_EntryScore"."common" = 1; @@ -78,9 +78,9 @@ CREATE VIEW "JMdict_CombinedEntryScore" AS SELECT CASE - WHEN "JMdict_EntryScore"."type" = 'kanji' + WHEN "JMdict_EntryScore"."type" = 'k' THEN (SELECT entryId FROM "JMdict_KanjiElement" WHERE "elementId" = "JMdict_EntryScore"."elementId") - WHEN "JMdict_EntryScore"."type" = 'reading' + WHEN "JMdict_EntryScore"."type" = 'r' THEN (SELECT entryId FROM "JMdict_ReadingElement" WHERE "elementId" = "JMdict_EntryScore"."elementId") END AS "entryId", MAX("JMdict_EntryScore"."score") AS "score",