talker icon indicating copy to clipboard operation
talker copied to clipboard

Integration for `drift`

Open dickermoshe opened this issue 1 year ago • 5 comments

Is your feature request related to a problem? Please describe. There is no package for drift Link

Describe the solution you'd like A package for drift

Describe alternatives you've considered This implementation they have an example of


@DriftDatabase(tables: [])
class AppDatabase extends _$AppDatabase {
  AppDatabase()
      : super(drift.driftDatabase(name: "shas.db")
            .interceptWith(LogInterceptor()));

  @override
  int get schemaVersion => 1;
}

class LogInterceptor extends QueryInterceptor {
  Future<T> _run<T>(
      String description, FutureOr<T> Function() operation) async {
    final stopwatch = Stopwatch()..start();
    talker.log('Running $description');

    try {
      final result = await operation();
      talker.log(' => succeeded after ${stopwatch.elapsedMilliseconds}ms');
      return result;
    } on Object catch (e, s) {
      talker.error(' => failed after ${stopwatch.elapsedMilliseconds}ms', e, s);
      rethrow;
    }
  }

  @override
  TransactionExecutor beginTransaction(QueryExecutor parent) {
    talker.log('begin');
    return super.beginTransaction(parent);
  }

  @override
  Future<void> commitTransaction(TransactionExecutor inner) {
    return _run('commit', () => inner.send());
  }

  @override
  Future<void> rollbackTransaction(TransactionExecutor inner) {
    return _run('rollback', () => inner.rollback());
  }

  @override
  Future<void> runBatched(
      QueryExecutor executor, BatchedStatements statements) {
    return _run(
        'batch with $statements', () => executor.runBatched(statements));
  }

  @override
  Future<int> runInsert(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runInsert(statement, args));
  }

  @override
  Future<int> runUpdate(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runUpdate(statement, args));
  }

  @override
  Future<int> runDelete(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runDelete(statement, args));
  }

  @override
  Future<void> runCustom(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runCustom(statement, args));
  }

  @override
  Future<List<Map<String, Object?>>> runSelect(
      QueryExecutor executor, String statement, List<Object?> args) {
    return _run(
        '$statement with $args', () => executor.runSelect(statement, args));
  }
}

Additional context N/A

dickermoshe avatar Sep 11 '24 18:09 dickermoshe

Hello @dickermoshe ! Drift is a really popular library and we would like to have addon package to collect transactions logs. Can you create pull-request with this new package ?

Frezyx avatar Oct 09 '24 09:10 Frezyx

I'll add this to our todo list.

dickermoshe avatar Oct 09 '24 19:10 dickermoshe

Hello @dickermoshe! Any updates ?

Frezyx avatar Nov 20 '24 12:11 Frezyx

Any news? @Frezyx can you add this for your roadmap?

listepo avatar Oct 19 '25 14:10 listepo

I think it's related to https://github.com/Frezyx/talker/pull/426

listepo avatar Oct 19 '25 14:10 listepo