diff --git a/lib/_data_ingestion/kanjidic/objects.dart b/lib/_data_ingestion/kanjidic/objects.dart index cd7b462..5f40c97 100644 --- a/lib/_data_ingestion/kanjidic/objects.dart +++ b/lib/_data_ingestion/kanjidic/objects.dart @@ -248,9 +248,6 @@ class Character extends SQLWritable { @override Map get sqlValue => { 'literal': literal, - 'grade': grade, 'strokeCount': strokeCount, - 'frequency': frequency, - 'jlpt': jlpt, }; } diff --git a/lib/_data_ingestion/kanjidic/seed_data.dart b/lib/_data_ingestion/kanjidic/seed_data.dart index 1907688..9a0e5bd 100644 --- a/lib/_data_ingestion/kanjidic/seed_data.dart +++ b/lib/_data_ingestion/kanjidic/seed_data.dart @@ -15,6 +15,27 @@ Future seedKANJIDICData(List characters, Database db) async { // } b.insert(KANJIDICTableNames.character, c.sqlValue); + if (c.grade != null) { + b.insert(KANJIDICTableNames.grade, { + 'kanji': c.literal, + 'grade': c.grade!, + }); + } + + if (c.frequency != null) { + b.insert(KANJIDICTableNames.frequency, { + 'kanji': c.literal, + 'frequency': c.frequency!, + }); + } + + if (c.jlpt != null) { + b.insert(KANJIDICTableNames.jlpt, { + 'kanji': c.literal, + 'jlpt': c.jlpt!, + }); + } + for (final n in c.radicalName) { assert(c.radical != null, 'Radical name without radical'); b.insert( diff --git a/lib/search/kanji_search.dart b/lib/search/kanji_search.dart index 99e5180..956ca0e 100644 --- a/lib/search/kanji_search.dart +++ b/lib/search/kanji_search.dart @@ -8,10 +8,21 @@ import 'package:sqflite_common/sqflite.dart'; Future>> _charactersQuery( DatabaseExecutor connection, String kanji, -) => connection.query( - KANJIDICTableNames.character, - where: 'literal = ?', - whereArgs: [kanji], +) => connection.rawQuery( + ''' + SELECT + "${KANJIDICTableNames.character}"."literal", + "${KANJIDICTableNames.character}"."strokeCount", + "${KANJIDICTableNames.grade}"."grade", + "${KANJIDICTableNames.jlpt}"."jlpt", + "${KANJIDICTableNames.frequency}"."frequency" + FROM "${KANJIDICTableNames.character}" + LEFT JOIN "${KANJIDICTableNames.grade}" ON "${KANJIDICTableNames.character}"."literal" = "${KANJIDICTableNames.grade}"."kanji" + LEFT JOIN "${KANJIDICTableNames.jlpt}" ON "${KANJIDICTableNames.character}"."literal" = "${KANJIDICTableNames.jlpt}"."kanji" + LEFT JOIN "${KANJIDICTableNames.frequency}" ON "${KANJIDICTableNames.character}"."literal" = "${KANJIDICTableNames.frequency}"."kanji" + WHERE "literal" = ? + ''', + [kanji], ); Future>> _codepointsQuery( diff --git a/lib/table_names/kanjidic.dart b/lib/table_names/kanjidic.dart index 042d1b8..ad20a95 100644 --- a/lib/table_names/kanjidic.dart +++ b/lib/table_names/kanjidic.dart @@ -1,6 +1,9 @@ abstract class KANJIDICTableNames { static const String version = 'KANJIDIC_Version'; static const String character = 'KANJIDIC_Character'; + static const String grade = 'KANJIDIC_Grade'; + static const String frequency = 'KANJIDIC_Frequency'; + static const String jlpt = 'KANJIDIC_JLPT'; static const String radicalName = 'KANJIDIC_RadicalName'; static const String codepoint = 'KANJIDIC_Codepoint'; static const String radical = 'KANJIDIC_Radical'; @@ -20,6 +23,9 @@ abstract class KANJIDICTableNames { static Set get allTables => { version, character, + grade, + frequency, + jlpt, radicalName, codepoint, radical, diff --git a/migrations/0007_KANJIDIC2.sql b/migrations/0007_KANJIDIC2.sql index 0c67147..484be62 100644 --- a/migrations/0007_KANJIDIC2.sql +++ b/migrations/0007_KANJIDIC2.sql @@ -19,6 +19,21 @@ CREATE TABLE "KANJIDIC_Character" ( "jlpt" INTEGER ) WITHOUT ROWID; +CREATE TABLE "KANJIDIC_Grade" ( + "kanji" CHAR(1) NOT NULL PRIMARY KEY REFERENCES "KANJIDIC_Character"("literal"), + "grade" INTEGER NOT NULL CHECK ("grade" BETWEEN 1 AND 10) +) WITHOUT ROWID; + +CREATE TABLE "KANJIDIC_Frequency" ( + "kanji" CHAR(1) NOT NULL PRIMARY KEY REFERENCES "KANJIDIC_Character"("literal"), + "frequency" INTEGER NOT NULL +) WITHOUT ROWID; + +CREATE TABLE "KANJIDIC_JLPT" ( + "kanji" CHAR(1) NOT NULL PRIMARY KEY REFERENCES "KANJIDIC_Character"("literal"), + "jlpt" INTEGER NOT NULL CHECK ("jlpt" BETWEEN 1 AND 5) +) WITHOUT ROWID; + CREATE TABLE "KANJIDIC_Codepoint" ( "kanji" CHAR(1) NOT NULL REFERENCES "KANJIDIC_Character"("literal"), "type" VARCHAR(6) NOT NULL CHECK ("type" IN ('jis208', 'jis212', 'jis213', 'ucs')),