@@ -24,22 +24,30 @@ suspend inline fun <T> KabinSuspendingQueries.safeTransactionWithResult(
24
24
body()
25
25
}
26
26
27
- inline fun SqlDriver.safeGlobalTransaction (
27
+ inline fun SqlDriver.safeGlobalQuery (
28
28
configuration : KabinDatabaseConfiguration ,
29
- noinline body : suspend TransactionCallbacks .() -> Unit
30
- ): QueryResult .AsyncValue <Unit > = KabinSuspendingQueries (this )
31
- .safeGlobalTransaction(configuration, body)
29
+ noinline body : suspend () -> Unit
30
+ ): QueryResult .AsyncValue <Unit > = with (KabinSuspendingQueries (this )) {
31
+ QueryResult .AsyncValue {
32
+ try {
33
+ tryToggleForeignKeys(configuration, enabled = false )
34
+ tryDifferForeignKeys(configuration, enabled = true )
35
+ body()
36
+ } finally {
37
+ tryToggleForeignKeys(configuration, enabled = true )
38
+ tryDifferForeignKeys(configuration, enabled = false )
39
+ }
40
+ }
41
+ }
32
42
33
- inline fun KabinSuspendingQueries.safeGlobalTransaction (
43
+ suspend inline fun KabinSuspendingQueries.safeGlobalTransaction (
34
44
configuration : KabinDatabaseConfiguration ,
35
45
noinline body : suspend TransactionCallbacks .() -> Unit
36
- ) = QueryResult .AsyncValue {
37
- try {
38
- tryToggleForeignKeys(configuration, enabled = false )
39
- safeTransaction(configuration, body = body)
40
- } finally {
41
- tryToggleForeignKeys(configuration, enabled = true )
42
- }
46
+ ) = try {
47
+ tryToggleForeignKeys(configuration, enabled = false )
48
+ safeTransaction(configuration, body = body)
49
+ } finally {
50
+ tryToggleForeignKeys(configuration, enabled = true )
43
51
}
44
52
45
53
suspend fun KabinSuspendingQueries.tryToggleForeignKeys (
@@ -52,9 +60,10 @@ suspend fun KabinSuspendingQueries.tryToggleForeignKeys(
52
60
}
53
61
54
62
suspend fun KabinSuspendingQueries.tryDifferForeignKeys (
55
- configuration : KabinDatabaseConfiguration
63
+ configuration : KabinDatabaseConfiguration ,
64
+ enabled : Boolean = true
56
65
) = with (configuration.extendedConfig) {
57
66
if (foreignKeyConstraintsEnabled && deferForeignKeysInsideTransaction) {
58
- deferForeignKeys()
67
+ deferForeignKeys(enabled )
59
68
}
60
69
}
0 commit comments