new mechanism of transactions

This commit is contained in:
2020-11-22 21:51:33 +06:00
parent 6bbe3a271f
commit 3de5558ed4
3 changed files with 16 additions and 7 deletions

View File

@@ -10,6 +10,8 @@
to get access to some end-store to get access to some end-store
* Add default realization of `StandardVersionsRepoProxy` based on `KeyValue` repos * Add default realization of `StandardVersionsRepoProxy` based on `KeyValue` repos
* Add realizations of `StandardVersionsRepoProxy` for exposed and android (`SQL` and `SharedPreferences`) * Add realizations of `StandardVersionsRepoProxy` for exposed and android (`SQL` and `SharedPreferences`)
* `Commons`:
* In Android
## 0.4.3 ## 0.4.3

View File

@@ -2,15 +2,22 @@ package dev.inmo.micro_utils.repos
import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteDatabase
import dev.inmo.micro_utils.coroutines.safely import dev.inmo.micro_utils.coroutines.safely
import kotlinx.coroutines.newSingleThreadContext
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.coroutineContext
object InTransaction: CoroutineContext.Element, CoroutineContext.Key<InTransaction> {
override val key: CoroutineContext.Key<InTransaction> = InTransaction
}
suspend fun <T> SQLiteDatabase.transaction(block: suspend SQLiteDatabase.() -> T): T { suspend fun <T> SQLiteDatabase.transaction(block: suspend SQLiteDatabase.() -> T): T {
return withContext(DatabaseCoroutineContext) { return when {
when { coroutineContext[InTransaction] == InTransaction -> {
inTransaction() -> {
block() block()
} }
else -> { else -> {
withContext(InTransaction) {
beginTransaction() beginTransaction()
safely( safely(
{ {