@@ -68,7 +68,11 @@ final class PostgreSQLClient {
68
68
}
69
69
}
70
70
71
- func parameterizedQuery( _ string: String , _ parameters: [ PostgreSQLData ] = [ ] ) throws -> Future < Void > {
71
+ func parameterizedQuery(
72
+ _ string: String ,
73
+ _ parameters: [ PostgreSQLData ] = [ ] ,
74
+ onRow: @escaping ( [ String : PostgreSQLData ] ) -> ( )
75
+ ) throws -> Future < Void > {
72
76
let parse = PostgreSQLParseRequest (
73
77
statementName: " " ,
74
78
query: string,
@@ -81,12 +85,29 @@ final class PostgreSQLClient {
81
85
parameters: parameters. map { try . serialize( data: $0) } ,
82
86
resultFormatCodes: [ . binary]
83
87
)
84
- return queueStream. enqueue ( [ . parse( parse) , . bind( bind) ] ) { message in
88
+ let execute = PostgreSQLExecuteRequest (
89
+ portalName: " " ,
90
+ maxRows: 0
91
+ )
92
+ var currentRow : PostgreSQLRowDescription ?
93
+ return queueStream. enqueue ( [
94
+ . parse( parse) , . bind( bind) , . execute( execute) , . sync
95
+ ] ) { message in
85
96
print ( message)
86
97
switch message {
87
- case . parseComplete: return false
88
98
case . errorResponse( let e) : throw e
89
- case . readyForQuery: return false
99
+ case . parseComplete: return false
100
+ case . bindComplete: return false
101
+ case . rowDescription( let row) :
102
+ currentRow = row
103
+ return false
104
+ case . dataRow( let data) :
105
+ let row = currentRow !! " Unexpected PostgreSQLDataRow without preceding PostgreSQLRowDescription. "
106
+ let parsed = try row. parse ( data: data)
107
+ onRow ( parsed)
108
+ return false
109
+ case . close: return false
110
+ case . readyForQuery: return true
90
111
default : fatalError ( " Unexpected message during PostgreSQLParseRequest: \( message) " )
91
112
}
92
113
}
0 commit comments