Skip to content

Integration for drift #261

Open
Open
@dickermoshe

Description

@dickermoshe

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    addonsRelated to addons/bridge packages like dio_logger and bloc_loggerenhancementNew feature or requestopen-to-contributionYou can open Pull-request to resolve this issue

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions