@@ -35,7 +35,7 @@ final class PSQLRowStream: @unchecked Sendable {
3535 case iteratingRows( onRow: ( PostgresRow ) throws -> ( ) , EventLoopPromise < Void > , PSQLRowsDataSource )
3636 case waitingForAll( [ PostgresRow ] , EventLoopPromise < [ PostgresRow ] > , PSQLRowsDataSource )
3737 case consumed( Result < String , Error > )
38- case asyncSequence( AsyncSequenceSource , PSQLRowsDataSource )
38+ case asyncSequence( AsyncSequenceSource , PSQLRowsDataSource , onFinish : @ Sendable ( ) -> ( ) )
3939 }
4040
4141 internal let rowDescription : [ RowDescription . Column ]
@@ -75,7 +75,7 @@ final class PSQLRowStream: @unchecked Sendable {
7575
7676 // MARK: Async Sequence
7777
78- func asyncSequence( ) -> PostgresRowSequence {
78+ func asyncSequence( onFinish : @escaping @ Sendable ( ) -> ( ) = { } ) -> PostgresRowSequence {
7979 self . eventLoop. preconditionInEventLoop ( )
8080
8181 guard case . waitingForConsumer( let bufferState) = self . downstreamState else {
@@ -95,13 +95,13 @@ final class PSQLRowStream: @unchecked Sendable {
9595 switch bufferState {
9696 case . streaming( let bufferedRows, let dataSource) :
9797 let yieldResult = source. yield ( contentsOf: bufferedRows)
98- self . downstreamState = . asyncSequence( source, dataSource)
99-
98+ self . downstreamState = . asyncSequence( source, dataSource, onFinish: onFinish)
10099 self . executeActionBasedOnYieldResult ( yieldResult, source: dataSource)
101100
102101 case . finished( let buffer, let commandTag) :
103102 _ = source. yield ( contentsOf: buffer)
104103 source. finish ( )
104+ onFinish ( )
105105 self . downstreamState = . consumed( . success( commandTag) )
106106
107107 case . failure( let error) :
@@ -130,7 +130,7 @@ final class PSQLRowStream: @unchecked Sendable {
130130 case . consumed:
131131 break
132132
133- case . asyncSequence( _, let dataSource) :
133+ case . asyncSequence( _, let dataSource, _ ) :
134134 dataSource. request ( for: self )
135135 }
136136 }
@@ -147,9 +147,10 @@ final class PSQLRowStream: @unchecked Sendable {
147147
148148 private func cancel0( ) {
149149 switch self . downstreamState {
150- case . asyncSequence( _, let dataSource) :
150+ case . asyncSequence( _, let dataSource, let onFinish ) :
151151 self . downstreamState = . consumed( . failure( CancellationError ( ) ) )
152152 dataSource. cancel ( for: self )
153+ onFinish ( )
153154
154155 case . consumed:
155156 return
@@ -320,7 +321,7 @@ final class PSQLRowStream: @unchecked Sendable {
320321 // immediately request more
321322 dataSource. request ( for: self )
322323
323- case . asyncSequence( let consumer, let source) :
324+ case . asyncSequence( let consumer, let source, _ ) :
324325 let yieldResult = consumer. yield ( contentsOf: newRows)
325326 self . executeActionBasedOnYieldResult ( yieldResult, source: source)
326327
@@ -359,10 +360,11 @@ final class PSQLRowStream: @unchecked Sendable {
359360 self . downstreamState = . consumed( . success( commandTag) )
360361 promise. succeed ( rows)
361362
362- case . asyncSequence( let source, _) :
363- source. finish ( )
363+ case . asyncSequence( let source, _, let onFinish) :
364364 self . downstreamState = . consumed( . success( commandTag) )
365-
365+ source. finish ( )
366+ onFinish ( )
367+
366368 case . consumed:
367369 break
368370 }
@@ -384,9 +386,10 @@ final class PSQLRowStream: @unchecked Sendable {
384386 self . downstreamState = . consumed( . failure( error) )
385387 promise. fail ( error)
386388
387- case . asyncSequence( let consumer, _) :
388- consumer. finish ( error)
389+ case . asyncSequence( let consumer, _, let onFinish) :
389390 self . downstreamState = . consumed( . failure( error) )
391+ consumer. finish ( error)
392+ onFinish ( )
390393
391394 case . consumed:
392395 break
0 commit comments