runTx<R> method

Future<R> runTx<R>(
  1. Future<R> fn(
    1. PostgreSQLExecutionContext ctx
    ), {
  2. PgRetryOptions? retryOptions,
  3. int? commitTimeoutInSeconds,
})

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);
}