suspend fun suspendTransaction()

in exposed-jdbc/src/main/kotlin/org/jetbrains/exposed/v1/jdbc/transactions/Transactions.kt [255:290]


suspend fun <T> suspendTransaction(
    db: Database? = null,
    transactionIsolation: Int? = db?.transactionManager?.defaultIsolationLevel,
    readOnly: Boolean? = db?.transactionManager?.defaultReadOnly,
    statement: suspend JdbcTransaction.() -> T
): T {
    val databaseToUse = resolveDatabaseOrThrow(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) {
            executeTransactionWithErrorHandling(
                transaction,
                shouldCommit = outer.db.useNestedTransactions
            ) {
                transaction.statement()
            }
        }
    } else {
        inTopLevelSuspendTransaction(
            db,
            transactionIsolation,
            readOnly,
            null,
            statement
        )
    }
}