migrations: combine score tables
This commit is contained in:
@@ -41,28 +41,31 @@ SearchMode _determineSearchMode(String word) {
|
||||
"${tableName}FTS"."entryId",
|
||||
100
|
||||
+ (("${tableName}FTS"."reading" = ?) * 50)
|
||||
+ "${tableName}Score"."score"
|
||||
+ "JMdict_EntryScore"."score"
|
||||
AS "score"
|
||||
FROM "${tableName}FTS"
|
||||
JOIN "${tableName}" USING ("entryId", "reading")
|
||||
JOIN "${tableName}Score" USING ("entryId", "reading")
|
||||
JOIN "JMdict_EntryScore" USING ("entryId", "reading")
|
||||
WHERE "${tableName}FTS"."reading" MATCH ? || '*'
|
||||
ORDER BY "score" DESC
|
||||
AND "JMdict_EntryScore"."type" = '${tableName == JMdictTableNames.kanjiElement ? 'kanji' : 'reading'}'
|
||||
ORDER BY
|
||||
"JMdict_EntryScore"."score" DESC
|
||||
${!countOnly ? 'LIMIT ?' : ''}
|
||||
),
|
||||
non_fts_results AS (
|
||||
SELECT DISTINCT
|
||||
"entryId",
|
||||
"${tableName}"."entryId",
|
||||
50
|
||||
+ "${tableName}Score"."score"
|
||||
+ "JMdict_EntryScore"."score"
|
||||
AS "score"
|
||||
FROM "${tableName}"
|
||||
JOIN "${tableName}Score" USING ("entryId", "reading")
|
||||
JOIN "JMdict_EntryScore" USING ("entryId", "reading")
|
||||
WHERE "reading" LIKE '%' || ? || '%'
|
||||
AND "entryId" NOT IN (SELECT "entryId" FROM "fts_results")
|
||||
AND "JMdict_EntryScore"."type" = '${tableName == JMdictTableNames.kanjiElement ? 'kanji' : 'reading'}'
|
||||
ORDER BY
|
||||
"score" DESC,
|
||||
"entryId" ASC
|
||||
"JMdict_EntryScore"."score" DESC,
|
||||
"${tableName}"."entryId" ASC
|
||||
${!countOnly ? 'LIMIT ?' : ''}
|
||||
)
|
||||
|
||||
|
||||
@@ -1,16 +1,26 @@
|
||||
CREATE TABLE JMdict_ReadingElementScore (
|
||||
CREATE TABLE "JMdict_EntryScore" (
|
||||
"type" TEXT NOT NULL CHECK ("type" IN ('reading', 'kanji')),
|
||||
"entryId" INTEGER NOT NULL,
|
||||
"reading" TEXT NOT NULL,
|
||||
"score" INTEGER NOT NULL DEFAULT 0,
|
||||
"common" BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY (entryId, reading)
|
||||
PRIMARY KEY ("type", "entryId", "reading")
|
||||
) WITHOUT ROWID;
|
||||
|
||||
CREATE INDEX "JMdict_ReadingElementScore_byEntryId_byReading_byScore" ON "JMdict_ReadingElementScore"("entryId", "reading", "score");
|
||||
CREATE INDEX "JMdict_ReadingElementScore_byScore" ON "JMdict_ReadingElementScore"("score");
|
||||
CREATE INDEX "JMdict_EntryScore_byEntryId_byReading_byScore" ON "JMdict_EntryScore"("entryId", "reading", "score");
|
||||
CREATE INDEX "JMdict_EntryScore_byScore" ON "JMdict_EntryScore"("score");
|
||||
CREATE INDEX "JMdict_EntryScore_byCommon" ON "JMdict_EntryScore"("common");
|
||||
|
||||
CREATE VIEW "JMdict_ReadingElementScoreView" AS
|
||||
CREATE INDEX "JMdict_EntryScore_byType_byEntryId_byReading_byScore" ON "JMdict_EntryScore"("type", "entryId", "reading", "score");
|
||||
CREATE INDEX "JMdict_EntryScore_byType_byScore" ON "JMdict_EntryScore"("type", "score");
|
||||
CREATE INDEX "JMdict_EntryScore_byType_byCommon" ON "JMdict_EntryScore"("type", "common");
|
||||
|
||||
-- NOTE: these views are deduplicated in order not to perform an unnecessary
|
||||
-- UNION on every trigger
|
||||
|
||||
CREATE VIEW "JMdict_EntryScoreView_Reading" AS
|
||||
SELECT
|
||||
'reading' AS "type",
|
||||
"JMdict_ReadingElement"."entryId",
|
||||
"JMdict_ReadingElement"."reading",
|
||||
(
|
||||
@@ -20,7 +30,12 @@ SELECT
|
||||
OR "gai" IS 1
|
||||
)
|
||||
AS "common",
|
||||
("common" * 50)
|
||||
((
|
||||
"news" IS 1
|
||||
OR "ichi" IS 1
|
||||
OR "spec" IS 1
|
||||
OR "gai" IS 1
|
||||
) * 50)
|
||||
+ (("news" IS 1) * 10)
|
||||
+ (("news" IS 2) * 5)
|
||||
+ (("ichi" IS 1) * 10)
|
||||
@@ -35,98 +50,9 @@ SELECT
|
||||
FROM "JMdict_ReadingElement"
|
||||
LEFT JOIN "JMdict_JLPTTag" USING ("entryId");
|
||||
|
||||
-- JMdict_ReadingElement triggers
|
||||
|
||||
CREATE TRIGGER "JMdict_ReadingElementScore_Insert"
|
||||
AFTER INSERT ON "JMdict_ReadingElement"
|
||||
BEGIN
|
||||
INSERT INTO "JMdict_ReadingElementScore" (
|
||||
"entryId",
|
||||
"reading",
|
||||
"score",
|
||||
"common"
|
||||
)
|
||||
SELECT "entryId", "reading", "score", "common"
|
||||
FROM "JMdict_ReadingElementScoreView"
|
||||
WHERE "entryId" = NEW."entryId" AND "reading" = NEW."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_ReadingElementScore_Update_JMdict_ReadingElement"
|
||||
AFTER UPDATE OF "news", "ichi", "spec", "gai", "nf", "orderNum"
|
||||
ON "JMdict_ReadingElement"
|
||||
BEGIN
|
||||
UPDATE "JMdict_ReadingElementScore"
|
||||
SET
|
||||
"score" = "JMdict_ReadingElementScoreView"."score",
|
||||
"common" = "JMdict_ReadingElementScoreView"."common"
|
||||
FROM "JMdict_ReadingElementScoreView"
|
||||
WHERE "entryId" = NEW."entryId" AND "reading" = NEW."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_ReadingElementScore_Delete_JMdict_ReadingElement"
|
||||
AFTER DELETE ON "JMdict_ReadingElement"
|
||||
BEGIN
|
||||
DELETE FROM "JMdict_ReadingElementScore"
|
||||
WHERE "entryId" = OLD."entryId" AND "reading" = OLD."reading";
|
||||
END;
|
||||
|
||||
-- JMdict_JLPTTag triggers
|
||||
|
||||
CREATE TRIGGER "JMdict_ReadingElementScore_Insert_JMdict_JLPTTag"
|
||||
AFTER INSERT ON "JMdict_JLPTTag"
|
||||
BEGIN
|
||||
UPDATE "JMdict_ReadingElementScore"
|
||||
SET
|
||||
"score" = "JMdict_ReadingElementScoreView"."score",
|
||||
"common" = "JMdict_ReadingElementScoreView"."common"
|
||||
FROM "JMdict_ReadingElementScoreView"
|
||||
WHERE "JMdict_ReadingElementScoreView"."entryId" = NEW."entryId"
|
||||
AND "JMdict_ReadingElementScoreView"."entryId" = "JMdict_ReadingElementScore"."entryId"
|
||||
AND "JMdict_ReadingElementScoreView"."reading" = "JMdict_ReadingElementScore"."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_ReadingElementScore_Update_JMdict_JLPTTag"
|
||||
AFTER UPDATE OF "jlptLevel"
|
||||
ON "JMdict_JLPTTag"
|
||||
BEGIN
|
||||
UPDATE "JMdict_ReadingElementScore"
|
||||
SET
|
||||
"score" = "JMdict_ReadingElementScoreView"."score",
|
||||
"common" = "JMdict_ReadingElementScoreView"."common"
|
||||
FROM "JMdict_ReadingElementScoreView"
|
||||
WHERE "JMdict_ReadingElementScoreView"."entryId" = NEW."entryId"
|
||||
AND "JMdict_ReadingElementScoreView"."entryId" = "JMdict_ReadingElementScore"."entryId"
|
||||
AND "JMdict_ReadingElementScoreView"."reading" = "JMdict_ReadingElementScore"."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_ReadingElementScore_Delete_JMdict_JLPTTag"
|
||||
AFTER DELETE ON "JMdict_JLPTTag"
|
||||
BEGIN
|
||||
UPDATE "JMdict_ReadingElementScore"
|
||||
SET
|
||||
"score" = "JMdict_ReadingElementScoreView"."score",
|
||||
"common" = "JMdict_ReadingElementScoreView"."common"
|
||||
FROM "JMdict_ReadingElementScoreView"
|
||||
WHERE "JMdict_ReadingElementScoreView"."entryId" = NEW."entryId"
|
||||
AND "JMdict_ReadingElementScoreView"."entryId" = "JMdict_ReadingElementScore"."entryId"
|
||||
AND "JMdict_ReadingElementScoreView"."reading" = "JMdict_ReadingElementScore"."reading";
|
||||
END;
|
||||
|
||||
---
|
||||
|
||||
CREATE TABLE JMdict_KanjiElementScore (
|
||||
"entryId" INTEGER NOT NULL,
|
||||
"reading" TEXT NOT NULL,
|
||||
"score" INTEGER NOT NULL DEFAULT 0,
|
||||
"common" BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY (entryId, reading)
|
||||
) WITHOUT ROWID;
|
||||
|
||||
CREATE INDEX "JMdict_KanjiElementScore_byEntryId_byReading_byScore" ON "JMdict_KanjiElementScore"("entryId", "reading", "score");
|
||||
CREATE INDEX "JMdict_KanjiElementScore_byScore" ON "JMdict_KanjiElementScore"("score");
|
||||
|
||||
CREATE VIEW "JMdict_KanjiElementScoreView" AS
|
||||
CREATE VIEW "JMdict_EntryScoreView_Kanji" AS
|
||||
SELECT
|
||||
'kanji' AS "type",
|
||||
"JMdict_KanjiElement"."entryId",
|
||||
"JMdict_KanjiElement"."reading",
|
||||
(
|
||||
@@ -136,7 +62,12 @@ SELECT
|
||||
OR "gai" IS 1
|
||||
)
|
||||
AS "common",
|
||||
("common" * 50)
|
||||
((
|
||||
"news" IS 1
|
||||
OR "ichi" IS 1
|
||||
OR "spec" IS 1
|
||||
OR "gai" IS 1
|
||||
) * 50)
|
||||
+ (("news" IS 1) * 10)
|
||||
+ (("news" IS 2) * 5)
|
||||
+ (("ichi" IS 1) * 10)
|
||||
@@ -151,79 +82,132 @@ SELECT
|
||||
FROM "JMdict_KanjiElement"
|
||||
LEFT JOIN "JMdict_JLPTTag" USING ("entryId");
|
||||
|
||||
-- JMdict_KanjiElement triggers
|
||||
CREATE VIEW "JMdict_EntryScoreView" AS
|
||||
SELECT *
|
||||
FROM "JMdict_EntryScoreView_Kanji"
|
||||
UNION ALL
|
||||
SELECT *
|
||||
FROM "JMdict_EntryScoreView_Reading";
|
||||
|
||||
CREATE TRIGGER "JMdict_KanjiElementScore_Insert"
|
||||
AFTER INSERT ON "JMdict_KanjiElement"
|
||||
|
||||
--- JMdict_ReadingElement triggers
|
||||
|
||||
CREATE TRIGGER "JMdict_EntryScore_Insert_JMdict_ReadingElement"
|
||||
AFTER INSERT ON "JMdict_ReadingElement"
|
||||
BEGIN
|
||||
INSERT INTO "JMdict_KanjiElementScore" (
|
||||
INSERT INTO "JMdict_EntryScore" (
|
||||
"type",
|
||||
"entryId",
|
||||
"reading",
|
||||
"score",
|
||||
"common"
|
||||
)
|
||||
SELECT "entryId", "reading", "score", "common"
|
||||
FROM "JMdict_KanjiElementScoreView"
|
||||
WHERE "entryId" = NEW."entryId" AND "reading" = NEW."reading";
|
||||
SELECT "type", "entryId", "reading", "score", "common"
|
||||
FROM "JMdict_EntryScoreView_Reading"
|
||||
WHERE "entryId" = NEW."entryId"
|
||||
AND "reading" = NEW."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_KanjiElementScore_Update_JMdict_KanjiElement"
|
||||
CREATE TRIGGER "JMdict_EntryScore_Update_JMdict_ReadingElement"
|
||||
AFTER UPDATE OF "news", "ichi", "spec", "gai", "nf", "orderNum"
|
||||
ON "JMdict_ReadingElement"
|
||||
BEGIN
|
||||
UPDATE "JMdict_EntryScore"
|
||||
SET
|
||||
"score" = "JMdict_EntryScoreView_Reading"."score",
|
||||
"common" = "JMdict_EntryScoreView_Reading"."common"
|
||||
FROM "JMdict_EntryScoreView_Reading"
|
||||
WHERE "entryId" = NEW."entryId"
|
||||
AND "reading" = NEW."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_EntryScore_Delete_JMdict_ReadingElement"
|
||||
AFTER DELETE ON "JMdict_ReadingElement"
|
||||
BEGIN
|
||||
DELETE FROM "JMdict_EntryScore"
|
||||
WHERE "type" = 'reading'
|
||||
AND "entryId" = OLD."entryId"
|
||||
AND "reading" = OLD."reading";
|
||||
END;
|
||||
|
||||
--- JMdict_KanjiElement triggers
|
||||
|
||||
CREATE TRIGGER "JMdict_EntryScore_Insert_JMdict_KanjiElement"
|
||||
AFTER INSERT ON "JMdict_KanjiElement"
|
||||
BEGIN
|
||||
INSERT INTO "JMdict_EntryScore" (
|
||||
"type",
|
||||
"entryId",
|
||||
"reading",
|
||||
"score",
|
||||
"common"
|
||||
)
|
||||
SELECT "type", "entryId", "reading", "score", "common"
|
||||
FROM "JMdict_EntryScoreView_Kanji"
|
||||
WHERE "entryId" = NEW."entryId"
|
||||
AND "reading" = NEW."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_EntryScore_Update_JMdict_KanjiElement"
|
||||
AFTER UPDATE OF "news", "ichi", "spec", "gai", "nf", "orderNum"
|
||||
ON "JMdict_KanjiElement"
|
||||
BEGIN
|
||||
UPDATE "JMdict_KanjiElementScore"
|
||||
UPDATE "JMdict_EntryScore"
|
||||
SET
|
||||
"score" = "JMdict_KanjiElementScoreView"."score",
|
||||
"common" = "JMdict_KanjiElementScoreView"."common"
|
||||
FROM "JMdict_KanjiElementScoreView"
|
||||
WHERE "entryId" = NEW."entryId" AND "reading" = NEW."reading";
|
||||
"score" = "JMdict_EntryScoreView_Kanji"."score",
|
||||
"common" = "JMdict_EntryScoreView_Kanji"."common"
|
||||
FROM "JMdict_EntryScoreView_Kanji"
|
||||
WHERE "entryId" = NEW."entryId"
|
||||
AND "reading" = NEW."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_KanjiElementScore_Delete_JMdict_KanjiElement"
|
||||
CREATE TRIGGER "JMdict_EntryScore_Delete_JMdict_KanjiElement"
|
||||
AFTER DELETE ON "JMdict_KanjiElement"
|
||||
BEGIN
|
||||
DELETE FROM "JMdict_KanjiElementScore"
|
||||
WHERE "entryId" = OLD."entryId" AND "reading" = OLD."reading";
|
||||
DELETE FROM "JMdict_EntryScore"
|
||||
WHERE "type" = 'kanji'
|
||||
AND "entryId" = OLD."entryId"
|
||||
AND "reading" = OLD."reading";
|
||||
END;
|
||||
|
||||
-- JMdict_JLPTTag triggers
|
||||
--- JMdict_JLPTTag triggers
|
||||
|
||||
CREATE TRIGGER "JMdict_KanjiElementScore_Insert_JMdict_JLPTTag"
|
||||
CREATE TRIGGER "JMdict_EntryScore_Insert_JMdict_JLPTTag"
|
||||
AFTER INSERT ON "JMdict_JLPTTag"
|
||||
BEGIN
|
||||
UPDATE "JMdict_KanjiElementScore"
|
||||
UPDATE "JMdict_EntryScore"
|
||||
SET
|
||||
"score" = "JMdict_KanjiElementScoreView"."score",
|
||||
"common" = "JMdict_KanjiElementScoreView"."common"
|
||||
FROM "JMdict_KanjiElementScoreView"
|
||||
WHERE "JMdict_KanjiElementScoreView"."entryId" = NEW."entryId"
|
||||
AND "JMdict_KanjiElementScoreView"."entryId" = "JMdict_KanjiElementScore"."entryId"
|
||||
AND "JMdict_KanjiElementScoreView"."reading" = "JMdict_KanjiElementScore"."reading";
|
||||
"score" = "JMdict_EntryScoreView"."score",
|
||||
"common" = "JMdict_EntryScoreView"."common"
|
||||
FROM "JMdict_EntryScoreView"
|
||||
WHERE "JMdict_EntryScoreView"."entryId" = NEW."entryId"
|
||||
AND "JMdict_EntryScoreView"."entryId" = "JMdict_EntryScore"."entryId"
|
||||
AND "JMdict_EntryScoreView"."reading" = "JMdict_EntryScore"."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_KanjiElementScore_Update_JMdict_JLPTTag"
|
||||
CREATE TRIGGER "JMdict_EntryScore_Update_JMdict_JLPTTag"
|
||||
AFTER UPDATE OF "jlptLevel"
|
||||
ON "JMdict_JLPTTag"
|
||||
BEGIN
|
||||
UPDATE "JMdict_KanjiElementScore"
|
||||
UPDATE "JMdict_EntryScore"
|
||||
SET
|
||||
"score" = "JMdict_KanjiElementScoreView"."score",
|
||||
"common" = "JMdict_KanjiElementScoreView"."common"
|
||||
FROM "JMdict_KanjiElementScoreView"
|
||||
WHERE "JMdict_KanjiElementScoreView"."entryId" = NEW."entryId"
|
||||
AND "JMdict_KanjiElementScoreView"."entryId" = "JMdict_KanjiElementScore"."entryId"
|
||||
AND "JMdict_KanjiElementScoreView"."reading" = "JMdict_KanjiElementScore"."reading";
|
||||
"score" = "JMdict_EntryScoreView"."score",
|
||||
"common" = "JMdict_EntryScoreView"."common"
|
||||
FROM "JMdict_EntryScoreView"
|
||||
WHERE "JMdict_EntryScoreView"."entryId" = NEW."entryId"
|
||||
AND "JMdict_EntryScoreView"."entryId" = "JMdict_EntryScore"."entryId"
|
||||
AND "JMdict_EntryScoreView"."reading" = "JMdict_EntryScore"."reading";
|
||||
END;
|
||||
|
||||
CREATE TRIGGER "JMdict_KanjiElementScore_Delete_JMdict_JLPTTag"
|
||||
CREATE TRIGGER "JMdict_EntryScore_Delete_JMdict_JLPTTag"
|
||||
AFTER DELETE ON "JMdict_JLPTTag"
|
||||
BEGIN
|
||||
UPDATE "JMdict_KanjiElementScore"
|
||||
UPDATE "JMdict_EntryScore"
|
||||
SET
|
||||
"score" = "JMdict_KanjiElementScoreView"."score",
|
||||
"common" = "JMdict_KanjiElementScoreView"."common"
|
||||
FROM "JMdict_KanjiElementScoreView"
|
||||
WHERE "JMdict_KanjiElementScoreView"."entryId" = NEW."entryId"
|
||||
AND "JMdict_KanjiElementScoreView"."entryId" = "JMdict_KanjiElementScore"."entryId"
|
||||
AND "JMdict_KanjiElementScoreView"."reading" = "JMdict_KanjiElementScore"."reading";
|
||||
"score" = "JMdict_EntryScoreView"."score",
|
||||
"common" = "JMdict_EntryScoreView"."common"
|
||||
FROM "JMdict_EntryScoreView"
|
||||
WHERE "JMdict_EntryScoreView"."entryId" = NEW."entryId"
|
||||
AND "JMdict_EntryScoreView"."entryId" = "JMdict_EntryScore"."entryId"
|
||||
AND "JMdict_EntryScoreView"."reading" = "JMdict_EntryScore"."reading";
|
||||
END;
|
||||
|
||||
@@ -42,15 +42,11 @@ FROM "JMdict_Entry"
|
||||
LEFT JOIN "JMdict_KanjiElement" USING("entryId")
|
||||
LEFT JOIN "JMdict_ReadingElement" USING("entryId");
|
||||
|
||||
|
||||
CREATE VIEW "JMdict_EntryCommon"("entryId")
|
||||
AS
|
||||
SELECT DISTINCT "entryId"
|
||||
FROM "JMdict_KanjiElementScore"
|
||||
FULL OUTER JOIN "JMdict_ReadingElementScore" USING("entryId")
|
||||
WHERE "JMdict_ReadingElementScore"."common" = 1
|
||||
OR "JMdict_KanjiElementScore"."common" = 1;
|
||||
|
||||
FROM "JMdict_EntryScore"
|
||||
WHERE "JMdict_EntryScore"."common" = 1;
|
||||
|
||||
-- TODO: Make it possible to match words that contain the
|
||||
-- kanji as an infix
|
||||
@@ -68,10 +64,11 @@ JOIN "JMdict_KanjiElementFTS"
|
||||
JOIN "JMdict_KanjiElement"
|
||||
ON "JMdict_KanjiElementFTS"."entryId" = "JMdict_KanjiElement"."entryId"
|
||||
AND "JMdict_KanjiElementFTS"."reading" LIKE '%' || "JMdict_KanjiElement"."reading"
|
||||
JOIN "JMdict_KanjiElementScore"
|
||||
ON "JMdict_KanjiElement"."entryId" = "JMdict_KanjiElementScore"."entryId"
|
||||
AND "JMdict_KanjiElement"."reading" = "JMdict_KanjiElementScore"."reading"
|
||||
WHERE "JMdict_KanjiElementScore"."common";
|
||||
JOIN "JMdict_EntryScore"
|
||||
ON "JMdict_EntryScore"."type" = 'kanji'
|
||||
AND "JMdict_KanjiElement"."entryId" = "JMdict_EntryScore"."entryId"
|
||||
AND "JMdict_KanjiElement"."reading" = "JMdict_EntryScore"."reading"
|
||||
WHERE "JMdict_EntryScore"."common" = 1;
|
||||
|
||||
|
||||
CREATE VIEW "RADKFILE_Radicals" AS
|
||||
|
||||
Reference in New Issue
Block a user