executeTransactionOperation<R> method

FutureOr<R> executeTransactionOperation<R>(
  1. TransactionOperation op,
  2. FutureOr<R> f(
    1. DBObjectDirectoryAdapterContext connection
    )
)

Implementation

FutureOr<R> executeTransactionOperation<R>(TransactionOperation op,
    FutureOr<R> Function(DBObjectDirectoryAdapterContext connection) f) {
  var transaction = op.transaction;

  if (isTransactionWithSingleOperation(op)) {
    return executeWithPool(f,
        onError: (e, s) => transaction.notifyExecutionError(
              e,
              s,
              errorResolver: resolveError,
              operation: op,
              debugInfo: () => op.toString(),
            ));
  }

  if (transaction.isOpen) {
    return transaction.addExecution<R, DBObjectDirectoryAdapterContext>(
      (c) => f(c),
      errorResolver: resolveError,
      operation: op,
      debugInfo: () => op.toString(),
    );
  }

  if (!transaction.isOpening) {
    transaction.open(
      () => openTransaction(transaction),
      callCloseTransactionRequired
          ? () => closeTransaction(transaction,
              transaction.context as DBObjectDirectoryAdapterContext?)
          : null,
    );
  }

  return transaction.onOpen<R>(() {
    return transaction.addExecution<R, DBObjectDirectoryAdapterContext>(
      (c) => f(c),
      errorResolver: resolveError,
      operation: op,
      debugInfo: () => op.toString(),
    );
  });
}