Missed highlevel function for transactions
This commit is contained in:
parent
b6bc3c1214
commit
9b48f6d2a3
@ -0,0 +1,36 @@
|
|||||||
|
@file:OptIn(LowLevelApi::class)
|
||||||
|
|
||||||
|
package ru.landgrafhomyak.db.serdha0.user_commons.executors
|
||||||
|
|
||||||
|
import ru.landgrafhomyak.db.serdha0.api.LowLevelApi
|
||||||
|
|
||||||
|
import ru.landgrafhomyak.db.serdha0.api.runtime.Executor
|
||||||
|
import ru.landgrafhomyak.db.serdha0.api.runtime.Transaction
|
||||||
|
|
||||||
|
public suspend inline fun <R> Executor.transaction(scope: (Transaction) -> R): R {
|
||||||
|
val transaction = this._startTransaction()
|
||||||
|
var e1: Throwable? = null
|
||||||
|
try {
|
||||||
|
return scope(transaction)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
e1 = e
|
||||||
|
throw e
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
transaction._assertTransactionFinishedAndReleaseResources()
|
||||||
|
} catch (e2: Throwable) {
|
||||||
|
if (e1 == null) {
|
||||||
|
throw e2
|
||||||
|
} else {
|
||||||
|
e1.addSuppressed(e2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public suspend inline fun <R> Executor.autoCommittedTransaction(scope: (Transaction) -> R): R =
|
||||||
|
this.transaction { transaction ->
|
||||||
|
_safeAutoClose(onAbort = { transaction.rollback() }, onSuccess = { transaction.commit() }) {
|
||||||
|
return@transaction scope(transaction)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user