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