logged<R> method

Future<R> logged<R>(
  1. String sql,
  2. List<Object?> bindings,
  3. FutureOr<R> run()
)

Times run, publishes a QueryEvent, and converts driver errors into QueryException carrying the SQL and bindings.

Implementation

Future<R> logged<R>(
  String sql,
  List<Object?> bindings,
  FutureOr<R> Function() run,
) async {
  final watch = Stopwatch()..start();
  try {
    return await run();
  } on DatabaseException {
    rethrow;
  } catch (e) {
    throw wrapError(e, sql, bindings);
  } finally {
    final event = QueryEvent(sql, bindings, watch.elapsed);
    _log?.add(event);
    for (final l in _listeners) {
      l(event);
    }
  }
}