executeInTransaction<T> method

Future<T> executeInTransaction<T>(
  1. Future<T> callback(
    1. TransactionExecutor
    ), {
  2. IsolationLevel? isolationLevel,
})

Execute within a transaction.

Implementation

Future<T> executeInTransaction<T>(
  Future<T> Function(TransactionExecutor) callback, {
  IsolationLevel? isolationLevel,
}) async {
  final transaction = await adapter.startTransaction(isolationLevel);

  try {
    final txExecutor = TransactionExecutor(
      transaction: transaction,
      compiler: compiler,
      adapter: adapter,
    );

    final result = await callback(txExecutor);

    await transaction.commit();

    return result;
  } catch (e) {
    if (transaction.isActive) {
      await transaction.rollback();
    }
    rethrow;
  }
}