startTransaction method
Future<TransactionInfo>
startTransaction({
- TransactionHeaders? headers,
- Duration timeout = const Duration(seconds: 5),
- Duration maxWait = const Duration(seconds: 2),
- TransactionIsolationLevel? isolationLevel,
override
Starts a transaction.
Implementation
@override
Future<TransactionInfo> startTransaction({
TransactionHeaders? headers,
Duration timeout = const Duration(seconds: 5),
Duration maxWait = const Duration(seconds: 2),
TransactionIsolationLevel? isolationLevel,
}) async {
await start();
final url = resolveStartTransactionEndpoint();
final body = convert.json.encode({
'max_wait': maxWait.inMilliseconds,
'timeout': timeout.inMilliseconds,
'isolation_level': isolationLevel?.originalName,
});
final wrappedHeaders = headersWrapper(headers: [this.headers, headers]);
// Create a retry function.
Future<TransactionInfo> fn(void Function(Uri) logger) async {
logger(url);
final response =
await http.post(url, headers: wrappedHeaders, body: body);
final json =
(convert.json.decode(convert.utf8.decode(response.bodyBytes)) as Map)
.cast<String, dynamic>();
_tryThrowPrismaException(json);
_tryThrowExceptionFromStatusCode(response.statusCode);
return TransactionInfo.fromJson(json);
}
return withRetry<TransactionInfo>(fn, gerund: 'starting transaction');
}