suspend fun suspendTransaction()

in exposed-r2dbc/src/main/kotlin/org/jetbrains/exposed/v1/r2dbc/transactions/Transactions.kt [107:141]


suspend fun <T> suspendTransaction(
    db: R2dbcDatabase? = null,
    transactionIsolation: IsolationLevel? = db?.transactionManager?.defaultIsolationLevel,
    readOnly: Boolean? = db?.transactionManager?.defaultReadOnly,
    statement: suspend R2dbcTransaction.() -> T
): T {
    val databaseToUse = resolveR2dbcDatabaseOrThrow(db)
    val outer = databaseToUse.transactionManager.getCurrentContextTransaction()

    return if (outer != null) {
        val transaction = outer.transactionManager.newTransaction(
            transactionIsolation ?: outer.transactionManager.defaultIsolationLevel,
            readOnly ?: outer.transactionManager.defaultReadOnly,
            outer
        )

        @OptIn(InternalApi::class)
        withTransactionContext(transaction) {
            executeR2dbcTransactionWithErrorHandling(
                transaction,
                shouldCommit = outer.db.useNestedTransactions
            ) {
                transaction.statement()
            }
        }
    } else {
        inTopLevelSuspendTransaction(
            db,
            transactionIsolation,
            readOnly,
            null,
            statement
        )
    }
}