@@ -3,11 +3,11 @@ import PowerSync
33
44final class KotlinPowerSyncDatabaseImpl : PowerSyncDatabaseProtocol {
55 private let kotlinDatabase : PowerSync . PowerSyncDatabase
6-
6+
77 var currentStatus : SyncStatus {
88 get { kotlinDatabase. currentStatus }
99 }
10-
10+
1111 init (
1212 schema: Schema ,
1313 dbFilename: String
@@ -19,55 +19,55 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
1919 dbFilename: dbFilename
2020 )
2121 }
22-
22+
2323 init ( kotlinDatabase: KotlinPowerSyncDatabase ) {
2424 self . kotlinDatabase = kotlinDatabase
2525 }
26-
26+
2727 func waitForFirstSync( ) async throws {
2828 try await kotlinDatabase. waitForFirstSync ( )
2929 }
30-
30+
3131 func connect(
3232 connector: PowerSyncBackendConnector ,
3333 crudThrottleMs: Int64 = 1000 ,
3434 retryDelayMs: Int64 = 5000 ,
3535 params: [ String : JsonParam ? ] = [ : ]
3636 ) async throws {
37- let connectorProxy = PowerSyncBackendConnectorAdapter ( swiftBackendConnector: connector)
38-
37+ let connectorAdapter = PowerSyncBackendConnectorAdapter ( swiftBackendConnector: connector)
38+
3939 try await kotlinDatabase. connect (
40- connector: connectorProxy ,
40+ connector: connectorAdapter ,
4141 crudThrottleMs: crudThrottleMs,
4242 retryDelayMs: retryDelayMs,
4343 params: params
4444 )
4545 }
46-
46+
4747 func getCrudBatch( limit: Int32 = 100 ) async throws -> CrudBatch ? {
4848 try await kotlinDatabase. getCrudBatch ( limit: limit)
4949 }
50-
50+
5151 func getNextCrudTransaction( ) async throws -> CrudTransaction ? {
5252 try await kotlinDatabase. getNextCrudTransaction ( )
5353 }
54-
54+
5555 func getPowerSyncVersion( ) async throws -> String {
5656 try await kotlinDatabase. getPowerSyncVersion ( )
5757 }
58-
58+
5959 func disconnect( ) async throws {
6060 try await kotlinDatabase. disconnect ( )
6161 }
62-
62+
6363 func disconnectAndClear( clearLocal: Bool = true ) async throws {
6464 try await kotlinDatabase. disconnectAndClear ( clearLocal: clearLocal)
6565 }
66-
66+
6767 func execute( sql: String , parameters: [ Any ] ? ) async throws -> Int64 {
6868 Int64 ( truncating: try await kotlinDatabase. execute ( sql: sql, parameters: parameters) )
6969 }
70-
70+
7171 func get< RowType> (
7272 sql: String ,
7373 parameters: [ Any ] ? ,
@@ -79,7 +79,7 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
7979 mapper: mapper
8080 ) as! RowType
8181 }
82-
82+
8383 func getAll< RowType> (
8484 sql: String ,
8585 parameters: [ Any ] ? ,
@@ -91,7 +91,7 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
9191 mapper: mapper
9292 ) as! [ RowType ]
9393 }
94-
94+
9595 func getOptional< RowType> (
9696 sql: String ,
9797 parameters: [ Any ] ? ,
@@ -103,7 +103,7 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
103103 mapper: mapper
104104 ) as! RowType ?
105105 }
106-
106+
107107 func watch< RowType> (
108108 sql: String ,
109109 parameters: [ Any ] ? ,
@@ -122,31 +122,17 @@ final class KotlinPowerSyncDatabaseImpl: PowerSyncDatabaseProtocol {
122122 }
123123 }
124124 }
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
150136 }
151137}
152138
@@ -155,17 +141,16 @@ enum PowerSyncError: Error {
155141}
156142
157143class SuspendTaskWrapper : KotlinSuspendFunction1 {
158- let handle : ( ) async throws -> Any
144+ let handle : ( any PowerSyncTransaction ) async throws -> Any
159145
160- init ( _ handle: @escaping ( ) async throws -> Any ) {
146+ init ( _ handle: @escaping ( any PowerSyncTransaction ) async throws -> Any ) {
161147 self . handle = handle
162148 }
163149
164- @MainActor
165150 func __invoke( p1: Any ? , completionHandler: @escaping ( Any ? , Error ? ) -> Void ) {
166151 Task {
167152 do {
168- let result = try await self . handle ( )
153+ let result = try await self . handle ( p1 as! any PowerSyncTransaction )
169154 completionHandler ( result, nil )
170155 } catch {
171156 completionHandler ( nil , error)
0 commit comments