private Mono runBatchDmlInternal()

in cloud-spanner-r2dbc/src/main/java/com/google/cloud/spanner/r2dbc/v2/DatabaseClientReactiveAdapter.java [242:265]


  private <T> Mono<T> runBatchDmlInternal(
      Function<TransactionContext, ApiFuture<T>> asyncOperation) {
    return Mono.defer(() -> {
      if (this.txnManager.isInReadonlyTransaction()) {
        return Mono.error(
            new IllegalAccessException("Cannot run DML statements in a readonly transaction."));
      } else if (!this.autoCommit && !this.txnManager.isInReadWriteTransaction()) {
        return Mono.error(new IllegalAccessException(
            "Cannot run DML statements outside of a transaction when autocommit is set to false."));
      }

      return convertFutureToMono(() -> {
        if (this.txnManager.isInReadWriteTransaction()) {
          return this.txnManager.runInTransaction(asyncOperation);
        } else {
          ApiFuture<T> rowCountFuture =
              this.dbClient
                  .runAsync()
                  .runAsync(asyncOperation::apply, REACTOR_EXECUTOR);
          return rowCountFuture;
        }
      });
    });
  }