withTransaction<R> function
Future<R>
withTransaction<R>({
- required Future<
R> action(), - TransactionNesting nesting = TransactionNesting.nested,
- bool useTransaction = true,
- DbPool? dbPool,
- String? debugName,
Obtains a connection and starts a MySQL transaction.
(docstring unchanged for brevity)
Implementation
Future<R> withTransaction<R>({
required Future<R> Function() action,
TransactionNesting nesting = TransactionNesting.nested,
bool useTransaction = true,
DbPool? dbPool,
String? debugName,
}) {
final nestedTransaction = Scope.hasScopeKey(Transaction.transactionKey);
switch (nesting) {
case TransactionNesting.notAllowed:
if (nestedTransaction) {
throw NestedTransactionException('You are already in a transaction. '
'Specify TransactionNesting.nestedTransaction');
}
return _runTransaction(
action,
useTransaction: useTransaction,
shareDb: false,
debugName: debugName,
);
case TransactionNesting.detached:
return _runTransaction(
action,
useTransaction: useTransaction,
shareDb: false,
debugName: debugName,
);
case TransactionNesting.nested:
return _runTransaction(
action,
useTransaction: useTransaction && !nestedTransaction,
shareDb: nestedTransaction,
debugName: debugName,
);
}
}