query method
Executes a query and returns the results.
Returns a List of results, or a single result if singleResult is true.
When fromMap is provided, results are converted via that function.
When the query returns a single column, only that column's values are returned.
Implementation
Future<dynamic> query(String sql,
{List<Object?> params = const [],
FromMap? fromMap,
bool singleResult = false,
String? dbName}) async {
dbName ??= defaultDBName;
final db = _getDB(dbName);
final resolvedParams = fixBoolParams(params);
final results = await db.select(sql, resolvedParams);
if (singleResult) {
if (results.isEmpty) {
return null;
}
final Map<String, dynamic> result = results.first;
if (result.keys.length == 1) {
return result[result.keys.first];
}
if (fromMap != null) {
return fromMap(result);
}
return result;
}
if (results.isNotEmpty && results.first.keys.length == 1) {
final String onlyField = results.first.keys.first;
return results.map((e) => e[onlyField]).toList();
}
if (fromMap != null) {
return results.map((map) => fromMap(map)).toList();
}
return results;
}