search/radicals: deduplicate input radicals before search

This commit is contained in:
2026-02-24 15:08:19 +09:00
parent 48f50628a1
commit f57cc68ef3

View File

@@ -7,6 +7,8 @@ Future<List<String>> searchRemainingRadicalsWithDbConnection(
DatabaseExecutor connection,
List<String> radicals,
) async {
final distinctRadicals = radicals.toSet();
final queryResult = await connection.rawQuery(
'''
SELECT DISTINCT "radical"
@@ -14,12 +16,12 @@ Future<List<String>> searchRemainingRadicalsWithDbConnection(
WHERE "kanji" IN (
SELECT "kanji"
FROM "${RADKFILETableNames.radkfile}"
WHERE "radical" IN (${List.filled(radicals.length, '?').join(',')})
WHERE "radical" IN (${List.filled(distinctRadicals.length, '?').join(',')})
GROUP BY "kanji"
HAVING COUNT(DISTINCT "radical") = ?
)
''',
[...radicals, radicals.length],
[...distinctRadicals, distinctRadicals.length],
);
final remainingRadicals = queryResult
@@ -33,15 +35,17 @@ Future<List<String>> searchKanjiByRadicalsWithDbConnection(
DatabaseExecutor connection,
List<String> radicals,
) async {
final distinctRadicals = radicals.toSet();
final queryResult = await connection.rawQuery(
'''
SELECT "kanji"
FROM "${RADKFILETableNames.radkfile}"
WHERE "radical" IN (${List.filled(radicals.length, '?').join(',')})
WHERE "radical" IN (${List.filled(distinctRadicals.length, '?').join(',')})
GROUP BY "kanji"
HAVING COUNT(DISTINCT "radical") = ?
''',
[...radicals, radicals.length],
[...distinctRadicals, distinctRadicals.length],
);
final kanji = queryResult.map((row) => row['kanji'] as String).toList();