mirror of
				https://github.com/InsanusMokrassar/MicroUtils.git
				synced 2025-10-30 19:50:31 +00:00 
			
		
		
		
	new mechanism of transactions
This commit is contained in:
		| @@ -10,6 +10,8 @@ | ||||
|         to get access to some end-store | ||||
|         * Add default realization of `StandardVersionsRepoProxy` based on `KeyValue` repos | ||||
|         * Add realizations of `StandardVersionsRepoProxy` for exposed and android (`SQL` and `SharedPreferences`) | ||||
|     * `Commons`: | ||||
|         * In Android | ||||
|  | ||||
| ## 0.4.3 | ||||
|  | ||||
|   | ||||
| @@ -2,15 +2,22 @@ package dev.inmo.micro_utils.repos | ||||
|  | ||||
| import android.database.sqlite.SQLiteDatabase | ||||
| import dev.inmo.micro_utils.coroutines.safely | ||||
| import kotlinx.coroutines.newSingleThreadContext | ||||
| 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 { | ||||
|     return withContext(DatabaseCoroutineContext) { | ||||
|         when { | ||||
|             inTransaction() -> { | ||||
|     return when { | ||||
|         coroutineContext[InTransaction] == InTransaction -> { | ||||
|             block() | ||||
|         } | ||||
|         else -> { | ||||
|             withContext(InTransaction) { | ||||
|                 beginTransaction() | ||||
|                 safely( | ||||
|                     { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user