Drift Database Instrumentation

(New in version 7.13.1)

The sentry_drift package provides Drift support for database instrumentation. The source can be found on GitHub. You must Set Up Performance monitoring to capture transactions for this integration to work.

Install

Add the sentry_drift dependency to install the Drift database instrumentation.

pubspec.yaml
Copied
dependencies:
sentry_flutter: ^7.14.0
sentry_drift: ^7.14.0

Configure

You need to inject SentryQueryExecutor into a Drift database instance:

Copied
import 'package:drift/native.dart';
import 'package:sentry_drift/sentry_drift.dart';

final executor = SentryQueryExecutor(
  () => NativeDatabase.memory(), // You can also provide your own database opener
  databaseName: 'my_db_name',
);
final database = AppDatabase(executor); // AppDatabase is an example of the auto-generated database class by Drift.

After configuring, every CRUD operation, including database transactions and batches, will be automatically instrumented and sent to Sentry.

Example

Copied
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:sentry/sentry.dart';
import 'package:sentry_drift/sentry_drift.dart';

import 'your_database.dart';

Future<void> driftTest() async {
  final tr = Sentry.startTransaction('drift', 'op', bindToScope: true);
  final executor = SentryQueryExecutor(
    () => NativeDatabase.memory(),
    databaseName: 'your_db_name',
  );
  final db = AppDatabase(executor);

  await db.into(db.todoItems).insert(
        TodoItemsCompanion.insert(
          title: 'This is a test title',
          content: 'test',
        ),
      );

  final items = await db.select(db.todoItems).get();
  print(items);

  await db.close();

  await tr.finish(status: const SpanStatus.ok());
}
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").