search/radicals: deduplicate input radicals before search
This commit is contained in:
@@ -7,6 +7,8 @@ Future<List<String>> searchRemainingRadicalsWithDbConnection(
|
|||||||
DatabaseExecutor connection,
|
DatabaseExecutor connection,
|
||||||
List<String> radicals,
|
List<String> radicals,
|
||||||
) async {
|
) async {
|
||||||
|
final distinctRadicals = radicals.toSet();
|
||||||
|
|
||||||
final queryResult = await connection.rawQuery(
|
final queryResult = await connection.rawQuery(
|
||||||
'''
|
'''
|
||||||
SELECT DISTINCT "radical"
|
SELECT DISTINCT "radical"
|
||||||
@@ -14,12 +16,12 @@ Future<List<String>> searchRemainingRadicalsWithDbConnection(
|
|||||||
WHERE "kanji" IN (
|
WHERE "kanji" IN (
|
||||||
SELECT "kanji"
|
SELECT "kanji"
|
||||||
FROM "${RADKFILETableNames.radkfile}"
|
FROM "${RADKFILETableNames.radkfile}"
|
||||||
WHERE "radical" IN (${List.filled(radicals.length, '?').join(',')})
|
WHERE "radical" IN (${List.filled(distinctRadicals.length, '?').join(',')})
|
||||||
GROUP BY "kanji"
|
GROUP BY "kanji"
|
||||||
HAVING COUNT(DISTINCT "radical") = ?
|
HAVING COUNT(DISTINCT "radical") = ?
|
||||||
)
|
)
|
||||||
''',
|
''',
|
||||||
[...radicals, radicals.length],
|
[...distinctRadicals, distinctRadicals.length],
|
||||||
);
|
);
|
||||||
|
|
||||||
final remainingRadicals = queryResult
|
final remainingRadicals = queryResult
|
||||||
@@ -33,15 +35,17 @@ Future<List<String>> searchKanjiByRadicalsWithDbConnection(
|
|||||||
DatabaseExecutor connection,
|
DatabaseExecutor connection,
|
||||||
List<String> radicals,
|
List<String> radicals,
|
||||||
) async {
|
) async {
|
||||||
|
final distinctRadicals = radicals.toSet();
|
||||||
|
|
||||||
final queryResult = await connection.rawQuery(
|
final queryResult = await connection.rawQuery(
|
||||||
'''
|
'''
|
||||||
SELECT "kanji"
|
SELECT "kanji"
|
||||||
FROM "${RADKFILETableNames.radkfile}"
|
FROM "${RADKFILETableNames.radkfile}"
|
||||||
WHERE "radical" IN (${List.filled(radicals.length, '?').join(',')})
|
WHERE "radical" IN (${List.filled(distinctRadicals.length, '?').join(',')})
|
||||||
GROUP BY "kanji"
|
GROUP BY "kanji"
|
||||||
HAVING COUNT(DISTINCT "radical") = ?
|
HAVING COUNT(DISTINCT "radical") = ?
|
||||||
''',
|
''',
|
||||||
[...radicals, radicals.length],
|
[...distinctRadicals, distinctRadicals.length],
|
||||||
);
|
);
|
||||||
|
|
||||||
final kanji = queryResult.map((row) => row['kanji'] as String).toList();
|
final kanji = queryResult.map((row) => row['kanji'] as String).toList();
|
||||||
|
|||||||
Reference in New Issue
Block a user