From f57cc68ef32fa7f3f92ed79449d692bfb5dbe8b1 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 24 Feb 2026 15:08:19 +0900 Subject: [PATCH] search/radicals: deduplicate input radicals before search --- lib/search/radical_search.dart | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/search/radical_search.dart b/lib/search/radical_search.dart index 15cab3a..0f1cf00 100644 --- a/lib/search/radical_search.dart +++ b/lib/search/radical_search.dart @@ -7,6 +7,8 @@ Future> searchRemainingRadicalsWithDbConnection( DatabaseExecutor connection, List radicals, ) async { + final distinctRadicals = radicals.toSet(); + final queryResult = await connection.rawQuery( ''' SELECT DISTINCT "radical" @@ -14,12 +16,12 @@ Future> 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> searchKanjiByRadicalsWithDbConnection( DatabaseExecutor connection, List 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();