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