runTx<R> method
Executa fn numa transação (PostgreSQLConnection.transaction). Com
retryOptions, a transação inteira é repetida (com outra conexão)
quando falha com um erro aceito por PgRetryOptions.retryIf (por
padrão, falha de serialização e deadlock).
Se a transação for cancelada com
PostgreSQLExecutionContext.cancelTransaction, o PostgreSQLRollback
é lançado (ou devolvido, se for compatível com R).
Implementation
Future<R> runTx<R>(Future<R> Function(PostgreSQLExecutionContext ctx) fn,
{PgRetryOptions? retryOptions, int? commitTimeoutInSeconds}) {
return withConnection((connection) async {
final result = await connection.transaction(fn,
commitTimeoutInSeconds: commitTimeoutInSeconds);
if (result is R) return result;
if (result is PostgreSQLRollback) throw result;
return result as R;
}, retryOptions: retryOptions);
}