@@ -3,11 +3,11 @@ import PowerSync
3
3
4
4
final class KotlinPowerSyncDatabaseImpl : PowerSyncDatabaseProtocol {
5
5
private let kotlinDatabase : PowerSync . PowerSyncDatabase
6
-
6
+
7
7
var currentStatus : SyncStatus {
8
8
get { kotlinDatabase. currentStatus }
9
9
}
10
-
10
+
11
11
init (
12
12
schema: Schema ,
13
13
dbFilename: String
@@ -19,55 +19,55 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
19
19
dbFilename: dbFilename
20
20
)
21
21
}
22
-
22
+
23
23
init ( kotlinDatabase: KotlinPowerSyncDatabase ) {
24
24
self . kotlinDatabase = kotlinDatabase
25
25
}
26
-
26
+
27
27
func waitForFirstSync( ) async throws {
28
28
try await kotlinDatabase. waitForFirstSync ( )
29
29
}
30
-
30
+
31
31
func connect(
32
32
connector: PowerSyncBackendConnector ,
33
33
crudThrottleMs: Int64 = 1000 ,
34
34
retryDelayMs: Int64 = 5000 ,
35
35
params: [ String : JsonParam ? ] = [ : ]
36
36
) async throws {
37
- let connectorProxy = PowerSyncBackendConnectorAdapter ( swiftBackendConnector: connector)
38
-
37
+ let connectorAdapter = PowerSyncBackendConnectorAdapter ( swiftBackendConnector: connector)
38
+
39
39
try await kotlinDatabase. connect (
40
- connector: connectorProxy ,
40
+ connector: connectorAdapter ,
41
41
crudThrottleMs: crudThrottleMs,
42
42
retryDelayMs: retryDelayMs,
43
43
params: params
44
44
)
45
45
}
46
-
46
+
47
47
func getCrudBatch( limit: Int32 = 100 ) async throws -> CrudBatch ? {
48
48
try await kotlinDatabase. getCrudBatch ( limit: limit)
49
49
}
50
-
50
+
51
51
func getNextCrudTransaction( ) async throws -> CrudTransaction ? {
52
52
try await kotlinDatabase. getNextCrudTransaction ( )
53
53
}
54
-
54
+
55
55
func getPowerSyncVersion( ) async throws -> String {
56
56
try await kotlinDatabase. getPowerSyncVersion ( )
57
57
}
58
-
58
+
59
59
func disconnect( ) async throws {
60
60
try await kotlinDatabase. disconnect ( )
61
61
}
62
-
62
+
63
63
func disconnectAndClear( clearLocal: Bool = true ) async throws {
64
64
try await kotlinDatabase. disconnectAndClear ( clearLocal: clearLocal)
65
65
}
66
-
66
+
67
67
func execute( sql: String , parameters: [ Any ] ? ) async throws -> Int64 {
68
68
Int64 ( truncating: try await kotlinDatabase. execute ( sql: sql, parameters: parameters) )
69
69
}
70
-
70
+
71
71
func get< RowType> (
72
72
sql: String ,
73
73
parameters: [ Any ] ? ,
@@ -79,7 +79,7 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
79
79
mapper: mapper
80
80
) as! RowType
81
81
}
82
-
82
+
83
83
func getAll< RowType> (
84
84
sql: String ,
85
85
parameters: [ Any ] ? ,
@@ -91,7 +91,7 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
91
91
mapper: mapper
92
92
) as! [ RowType ]
93
93
}
94
-
94
+
95
95
func getOptional< RowType> (
96
96
sql: String ,
97
97
parameters: [ Any ] ? ,
@@ -103,7 +103,7 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
103
103
mapper: mapper
104
104
) as! RowType ?
105
105
}
106
-
106
+
107
107
func watch< RowType> (
108
108
sql: String ,
109
109
parameters: [ Any ] ? ,
@@ -122,31 +122,17 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
122
122
}
123
123
}
124
124
}
125
-
126
- func writeTransaction< R> ( callback: @escaping ( any PowerSyncTransactionProtocol ) async throws -> R ) async throws -> R {
127
- let wrappedCallback = SuspendTaskWrapper { [ kotlinDatabase] in
128
- // Create a wrapper that converts the KMP transaction to our Swift protocol
129
- if let kmpTransaction = kotlinDatabase as? PowerSyncTransactionProtocol {
130
- return try await callback ( kmpTransaction)
131
- } else {
132
- throw PowerSyncError . invalidTransaction
133
- }
134
- }
135
-
136
- return try await kotlinDatabase. writeTransaction ( callback: wrappedCallback) as! R
137
- }
138
-
139
- func readTransaction< R> ( callback: @escaping ( any PowerSyncTransactionProtocol ) async throws -> R ) async throws -> R {
140
- let wrappedCallback = SuspendTaskWrapper { [ kotlinDatabase] in
141
- // Create a wrapper that converts the KMP transaction to our Swift protocol
142
- if let kmpTransaction = kotlinDatabase as? PowerSyncTransactionProtocol {
143
- return try await callback ( kmpTransaction)
144
- } else {
145
- throw PowerSyncError . invalidTransaction
146
- }
147
- }
148
-
149
- return try await kotlinDatabase. readTransaction ( callback: wrappedCallback) as! R
125
+
126
+ public func writeTransaction< R> ( callback: @escaping ( any PowerSyncTransaction ) async throws -> R ) async throws -> R {
127
+ return try await kotlinDatabase. writeTransaction ( callback: SuspendTaskWrapper { transaction in
128
+ return try await callback ( transaction)
129
+ } ) as! R
130
+ }
131
+
132
+ public func readTransaction< R> ( callback: @escaping ( any PowerSyncTransaction ) async throws -> R ) async throws -> R {
133
+ return try await kotlinDatabase. writeTransaction ( callback: SuspendTaskWrapper { transaction in
134
+ return try await callback ( transaction)
135
+ } ) as! R
150
136
}
151
137
}
152
138
@@ -155,17 +141,16 @@ enum PowerSyncError: Error {
155
141
}
156
142
157
143
class SuspendTaskWrapper : KotlinSuspendFunction1 {
158
- let handle : ( ) async throws -> Any
144
+ let handle : ( any PowerSyncTransaction ) async throws -> Any
159
145
160
- init ( _ handle: @escaping ( ) async throws -> Any ) {
146
+ init ( _ handle: @escaping ( any PowerSyncTransaction ) async throws -> Any ) {
161
147
self . handle = handle
162
148
}
163
149
164
- @MainActor
165
150
func __invoke( p1: Any ? , completionHandler: @escaping ( Any ? , Error ? ) -> Void ) {
166
151
Task {
167
152
do {
168
- let result = try await self . handle ( )
153
+ let result = try await self . handle ( p1 as! any PowerSyncTransaction )
169
154
completionHandler ( result, nil )
170
155
} catch {
171
156
completionHandler ( nil , error)
0 commit comments