jmdict: elementId instead of reading for element restriction tables
All checks were successful
Build and test / build (push) Successful in 8m0s

This commit is contained in:
2026-04-08 19:57:07 +09:00
parent 6364457d9e
commit a222b2d9b8
4 changed files with 43 additions and 19 deletions

View File

@@ -148,13 +148,17 @@ Future<void> seedJMDictData(List<Entry> entries, Database db) async {
for (final rk in s.restrictedToKanji) {
b.insert(JMdictTableNames.senseRestrictedToKanji, {
'senseId': s.senseId,
'kanji': rk,
'kanjiElementId': e.kanji
.firstWhere((k) => k.reading == rk)
.elementId,
});
}
for (final rr in s.restrictedToReading) {
b.insert(JMdictTableNames.senseRestrictedToReading, {
'senseId': s.senseId,
'reading': rr,
'readingElementId': e.readings
.firstWhere((r) => r.reading == rr)
.elementId,
});
}
for (final ls in s.languageSource) {

View File

@@ -216,19 +216,43 @@ Future<List<Map<String, Object?>>> _sensepossQuery(
Future<List<Map<String, Object?>>> _senserestrictedtokanjisQuery(
DatabaseExecutor connection,
List<int> senseIds,
) => connection.query(
JMdictTableNames.senseRestrictedToKanji,
where: 'senseId IN (${List.filled(senseIds.length, '?').join(',')})',
whereArgs: senseIds,
) => connection.rawQuery(
"""
SELECT
"${JMdictTableNames.senseRestrictedToKanji}".senseId,
"${JMdictTableNames.senseRestrictedToKanji}".kanjiElementId,
"${JMdictTableNames.kanjiElement}".reading
FROM "${JMdictTableNames.senseRestrictedToKanji}"
JOIN "${JMdictTableNames.kanjiElement}"
ON "${JMdictTableNames.senseRestrictedToKanji}"."kanjiElementId" = "${JMdictTableNames.kanjiElement}"."elementId"
WHERE
"senseId" IN (${List.filled(senseIds.length, '?').join(',')})
ORDER BY
"${JMdictTableNames.senseRestrictedToKanji}"."senseId",
"${JMdictTableNames.senseRestrictedToKanji}"."kanjiElementId"
""",
[...senseIds],
);
Future<List<Map<String, Object?>>> _senserestrictedtoreadingsQuery(
DatabaseExecutor connection,
List<int> senseIds,
) => connection.query(
JMdictTableNames.senseRestrictedToReading,
where: 'senseId IN (${List.filled(senseIds.length, '?').join(',')})',
whereArgs: senseIds,
) => connection.rawQuery(
"""
SELECT
"${JMdictTableNames.senseRestrictedToReading}".senseId,
"${JMdictTableNames.senseRestrictedToReading}".readingElementId,
"${JMdictTableNames.readingElement}".reading
FROM "${JMdictTableNames.senseRestrictedToReading}"
JOIN "${JMdictTableNames.readingElement}"
ON "${JMdictTableNames.senseRestrictedToReading}"."readingElementId" = "${JMdictTableNames.readingElement}"."elementId"
WHERE
"senseId" IN (${List.filled(senseIds.length, '?').join(',')})
ORDER BY
"${JMdictTableNames.senseRestrictedToReading}"."senseId",
"${JMdictTableNames.senseRestrictedToReading}"."readingElementId"
""",
[...senseIds],
);
Future<List<Map<String, Object?>>> _examplesentencesQuery(

View File

@@ -318,7 +318,7 @@ List<WordSearchSense> _regroupSenses({
.map((e) => e['reading'] as String)
.toList(),
restrictedToKanji: restrictedToKanjis
.map((e) => e['kanji'] as String)
.map((e) => e['reading'] as String)
.toList(),
fields: fields
.map((e) => JMdictField.fromId(e['field'] as String))

View File

@@ -116,18 +116,14 @@ CREATE TABLE "JMdict_Sense" (
CREATE TABLE "JMdict_SenseRestrictedToKanji" (
"senseId" INTEGER NOT NULL REFERENCES "JMdict_Sense"("senseId"),
"kanji" TEXT NOT NULL,
"entryId" INTEGER NOT NULL GENERATED ALWAYS AS ("senseId" / 100) VIRTUAL,
FOREIGN KEY ("entryId", "kanji") REFERENCES "JMdict_KanjiElement"("entryId", "reading"),
PRIMARY KEY ("senseId", "kanji")
"kanjiElementId" INTEGER NOT NULL REFERENCES "JMdict_KanjiElement"("elementId"),
PRIMARY KEY ("senseId", "kanjiElementId")
) WITHOUT ROWID;
CREATE TABLE "JMdict_SenseRestrictedToReading" (
"senseId" INTEGER NOT NULL REFERENCES "JMdict_Sense"("senseId"),
"reading" TEXT NOT NULL,
"entryId" INTEGER NOT NULL GENERATED ALWAYS AS ("senseId" / 100) VIRTUAL,
FOREIGN KEY ("entryId", "reading") REFERENCES "JMdict_ReadingElement"("entryId", "reading"),
PRIMARY KEY ("senseId", "reading")
"readingElementId" INTEGER NOT NULL REFERENCES "JMdict_ReadingElement"("elementId"),
PRIMARY KEY ("senseId", "readingElementId")
) WITHOUT ROWID;
-- In order to add xrefs, you will need to have added the entry to xref to.