51 lines
1.4 KiB
Dart
51 lines
1.4 KiB
Dart
import 'package:jadb/table_names/radkfile.dart';
|
|
import 'package:sqflite_common/sqlite_api.dart';
|
|
|
|
// TODO: validate that the list of radicals all are valid radicals
|
|
|
|
Future<List<String>> searchRemainingRadicalsWithDbConnection(
|
|
DatabaseExecutor connection,
|
|
List<String> radicals,
|
|
) async {
|
|
final queryResult = await connection.rawQuery(
|
|
'''
|
|
SELECT DISTINCT "radical"
|
|
FROM "${RADKFILETableNames.radkfile}"
|
|
WHERE "kanji" IN (
|
|
SELECT "kanji"
|
|
FROM "${RADKFILETableNames.radkfile}"
|
|
WHERE "radical" IN (${List.filled(radicals.length, '?').join(',')})
|
|
GROUP BY "kanji"
|
|
HAVING COUNT(DISTINCT "radical") = ?
|
|
)
|
|
''',
|
|
[...radicals, radicals.length],
|
|
);
|
|
|
|
final remainingRadicals = queryResult
|
|
.map((row) => row['radical'] as String)
|
|
.toList();
|
|
|
|
return remainingRadicals;
|
|
}
|
|
|
|
Future<List<String>> searchKanjiByRadicalsWithDbConnection(
|
|
DatabaseExecutor connection,
|
|
List<String> radicals,
|
|
) async {
|
|
final queryResult = await connection.rawQuery(
|
|
'''
|
|
SELECT "kanji"
|
|
FROM "${RADKFILETableNames.radkfile}"
|
|
WHERE "radical" IN (${List.filled(radicals.length, '?').join(',')})
|
|
GROUP BY "kanji"
|
|
HAVING COUNT(DISTINCT "radical") = ?
|
|
''',
|
|
[...radicals, radicals.length],
|
|
);
|
|
|
|
final kanji = queryResult.map((row) => row['kanji'] as String).toList();
|
|
|
|
return kanji;
|
|
}
|