savepoint<T> method
Executa block dentro de um SAVEPOINT da transação atual.
Se block lançar uma exceção (por exemplo, uma consulta que falhou), as
alterações feitas dentro dele são desfeitas com ROLLBACK TO SAVEPOINT
e a exceção é relançada; a transação continua válida e pode seguir com
outras consultas ou ser confirmada. Sem exceção, o savepoint é liberado
(RELEASE SAVEPOINT) e o valor de block é devolvido.
Consultas executadas dentro de block (no contexto recebido ou no da
transação) que falharem não desfazem a transação inteira, desde que
sejam aguardadas antes de block terminar. Savepoints podem ser
aninhados. PostgreSQLExecutionContext.cancelTransaction dentro de
block continua desfazendo a transação inteira.
Só pode ser usado no contexto recebido por PostgreSQLConnection.transaction; em outro contexto lança StateError.
Implementation
Future<T> savepoint<T>(
Future<T> Function(PostgreSQLExecutionContext ctx) block) {
final self = this;
if (self is _TransactionProxy) return self.savepoint(block);
throw StateError('savepoint() can only be used inside transaction().');
}