simpleTransaction method

Future simpleTransaction(
  1. Future f(
    1. QueryExecutor
    )
)

Implementation

Future<dynamic> simpleTransaction(
    Future<dynamic> Function(QueryExecutor) f) async {
  logger?.fine('Entering simpleTransaction');
  if (connection is! PostgreSQLConnection) {
    return await f(this);
  }

  final conn = connection as PostgreSQLConnection;
  var returnValue;

  var txResult = await conn.transaction((ctx) async {
    try {
      logger?.fine('Entering transaction');
      var tx =
          PostgreSqlExecutor(connectionInfo, logger: logger, connection: ctx);
      returnValue = await f(tx);
    } catch (e) {
      ctx.cancelTransaction(reason: e.toString());
      rethrow;
    } finally {
      logger?.fine('Exiting transaction');
    }
  });

  if (txResult is PostgreSQLRollback) {
    /*if (txResult.reason == null) {
      throw StateError('The transaction was cancelled.');
    } else {*/
    throw StateError(
        'The transaction was cancelled with reason "${txResult.reason}".');
    //}
  } else {
    return returnValue;
  }
}