@@ -333,34 +333,32 @@ extension DatabasePool: DatabaseReader {
333
333
}
334
334
335
335
public func asyncRead( _ value: @escaping ( Result < Database , Error > ) -> Void ) {
336
- do {
337
- guard let readerPool = self . readerPool else {
338
- throw DatabaseError ( resultCode : . SQLITE_MISUSE , message : " Connection is closed " )
339
- }
340
- readerPool . async { result in
341
- do {
342
- let ( reader , releaseReader ) = try result . get ( )
343
- // Second async jump because that's how `Pool.async` has to be used.
344
- reader . async { db in
345
- defer {
346
- try ? db . commit ( ) // Ignore commit error
347
- releaseReader ( )
348
- }
349
- do {
350
- // The block isolation comes from the DEFERRED transaction.
351
- try db . beginTransaction ( . deferred )
352
- try db. clearSchemaCacheIfNeeded ( )
353
- value ( . success ( db ) )
354
- } catch {
355
- value ( . failure ( error ) )
356
- }
336
+ guard let readerPool = self . readerPool else {
337
+ value ( . failure ( DatabaseError ( resultCode : . SQLITE_MISUSE , message : " Connection is closed " ) ) )
338
+ return
339
+ }
340
+
341
+ readerPool . asyncGet { result in
342
+ do {
343
+ let ( reader , releaseReader ) = try result . get ( )
344
+ // Second async jump because that's how `Pool .async` has to be used.
345
+ reader . async { db in
346
+ defer {
347
+ try ? db . commit ( ) // Ignore commit error
348
+ releaseReader ( )
349
+ }
350
+ do {
351
+ // The block isolation comes from the DEFERRED transaction.
352
+ try db. beginTransaction ( . deferred )
353
+ try db . clearSchemaCacheIfNeeded ( )
354
+ value ( . success ( db ) )
355
+ } catch {
356
+ value ( . failure ( error ) )
357
357
}
358
- } catch {
359
- value ( . failure( error) )
360
358
}
359
+ } catch {
360
+ value ( . failure( error) )
361
361
}
362
- } catch {
363
- value ( . failure( error) )
364
362
}
365
363
}
366
364
@@ -379,32 +377,30 @@ extension DatabasePool: DatabaseReader {
379
377
}
380
378
381
379
public func asyncUnsafeRead( _ value: @escaping ( Result < Database , Error > ) -> Void ) {
382
- do {
383
- guard let readerPool = self . readerPool else {
384
- throw DatabaseError ( resultCode : . SQLITE_MISUSE , message : " Connection is closed " )
385
- }
386
- readerPool . async { result in
387
- do {
388
- let ( reader , releaseReader ) = try result . get ( )
389
- // Second async jump because that's how `Pool.async` has to be used.
390
- reader . async { db in
391
- defer {
392
- releaseReader ( )
393
- }
394
- do {
395
- // The block isolation comes from the DEFERRED transaction.
396
- try db . clearSchemaCacheIfNeeded ( )
397
- value ( . success ( db ) )
398
- } catch {
399
- value ( . failure ( error ) )
400
- }
380
+ guard let readerPool = self . readerPool else {
381
+ value ( . failure ( DatabaseError ( resultCode : . SQLITE_MISUSE , message : " Connection is closed " ) ) )
382
+ return
383
+ }
384
+
385
+ readerPool . asyncGet { result in
386
+ do {
387
+ let ( reader , releaseReader ) = try result . get ( )
388
+ // Second async jump because that's how `Pool .async` has to be used.
389
+ reader . async { db in
390
+ defer {
391
+ releaseReader ( )
392
+ }
393
+ do {
394
+ // The block isolation comes from the DEFERRED transaction.
395
+ try db . clearSchemaCacheIfNeeded ( )
396
+ value ( . success ( db ) )
397
+ } catch {
398
+ value ( . failure ( error ) )
401
399
}
402
- } catch {
403
- value ( . failure( error) )
404
400
}
401
+ } catch {
402
+ value ( . failure( error) )
405
403
}
406
- } catch {
407
- value ( . failure( error) )
408
404
}
409
405
}
410
406
0 commit comments