query method

Future query(
  1. String sql, {
  2. List<Object?> params = const [],
  3. FromMap? fromMap,
  4. bool singleResult = false,
  5. String? dbName,
})

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;
}