transactional<T> method
Execute callback
inside database transaction
If MySQLClientException is thrown inside callback
function, transaction is rolled back
Implementation
Future<T> transactional<T>(
FutureOr<T> Function(MySQLConnection conn) callback) async {
// prevent double transaction
if (_inTransaction) {
throw MySQLClientException("Already in transaction");
}
_inTransaction = true;
await execute("START TRANSACTION");
try {
final result = await callback(this);
await execute("COMMIT");
_inTransaction = false;
return result;
} catch (e) {
await execute("ROLLBACK");
_inTransaction = false;
rethrow;
}
}