@@ -29,8 +29,7 @@ struct ExtendedQueryStateMachine {
29
29
case sendParseDescribeBindExecuteSync( PostgresQuery )
30
30
case sendParseDescribeSync( name: String , query: String , bindingDataTypes: [ PostgresDataType ] )
31
31
case sendBindExecuteSync( PSQLExecuteStatement )
32
- case sendQuery( String )
33
-
32
+
34
33
// --- general actions
35
34
case failQuery( EventLoopPromise < PSQLRowStream > , with: PSQLError )
36
35
case succeedQuery( EventLoopPromise < PSQLRowStream > , with: QueryResult )
@@ -86,12 +85,6 @@ struct ExtendedQueryStateMachine {
86
85
state = . messagesSent( queryContext)
87
86
return . sendParseDescribeSync( name: name, query: query, bindingDataTypes: bindingDataTypes)
88
87
}
89
-
90
- case . simpleQuery( let query, _) :
91
- return self . avoidingStateMachineCoW { state -> Action in
92
- state = . messagesSent( queryContext)
93
- return . sendQuery( query)
94
- }
95
88
}
96
89
}
97
90
@@ -112,7 +105,7 @@ struct ExtendedQueryStateMachine {
112
105
113
106
self . isCancelled = true
114
107
switch queryContext. query {
115
- case . unnamed( _, let eventLoopPromise) , . executeStatement( _, let eventLoopPromise) , . simpleQuery ( _ , let eventLoopPromise ) :
108
+ case . unnamed( _, let eventLoopPromise) , . executeStatement( _, let eventLoopPromise) :
116
109
return . failQuery( eventLoopPromise, with: . queryCancelled)
117
110
118
111
case . prepareStatement( _, _, _, let eventLoopPromise) :
@@ -178,19 +171,11 @@ struct ExtendedQueryStateMachine {
178
171
state = . noDataMessageReceived( queryContext)
179
172
return . succeedPreparedStatementCreation( promise, with: nil )
180
173
}
181
-
182
- case . simpleQuery:
183
- return self . setAndFireError ( . unexpectedBackendMessage( . noData) )
184
174
}
185
175
}
186
176
187
177
mutating func rowDescriptionReceived( _ rowDescription: RowDescription ) -> Action {
188
- let queryContext : ExtendedQueryContext
189
- switch self . state {
190
- case . messagesSent( let extendedQueryContext) ,
191
- . parameterDescriptionReceived( let extendedQueryContext) :
192
- queryContext = extendedQueryContext
193
- default :
178
+ guard case . parameterDescriptionReceived( let queryContext) = self . state else {
194
179
return self . setAndFireError ( . unexpectedBackendMessage( . rowDescription( rowDescription) ) )
195
180
}
196
181
@@ -213,7 +198,7 @@ struct ExtendedQueryStateMachine {
213
198
}
214
199
215
200
switch queryContext. query {
216
- case . unnamed, . executeStatement, . simpleQuery :
201
+ case . unnamed, . executeStatement:
217
202
return . wait
218
203
219
204
case . prepareStatement( _, _, _, let eventLoopPromise) :
@@ -234,9 +219,6 @@ struct ExtendedQueryStateMachine {
234
219
235
220
case . prepareStatement:
236
221
return . evaluateErrorAtConnectionLevel( . unexpectedBackendMessage( . bindComplete) )
237
-
238
- case . simpleQuery:
239
- return self . setAndFireError ( . unexpectedBackendMessage( . bindComplete) )
240
222
}
241
223
242
224
case . noDataMessageReceived( let queryContext) :
@@ -276,40 +258,20 @@ struct ExtendedQueryStateMachine {
276
258
return . wait
277
259
}
278
260
279
- case . rowDescriptionReceived( let queryContext, let columns) :
280
- switch queryContext. query {
281
- case . simpleQuery( _, let eventLoopPromise) :
282
- // When receiving a data row, we must ensure that the data row column count
283
- // matches the previously received row description column count.
284
- guard dataRow. columnCount == columns. count else {
285
- return self . setAndFireError ( . unexpectedBackendMessage( . dataRow( dataRow) ) )
286
- }
287
-
288
- return self . avoidingStateMachineCoW { state -> Action in
289
- var demandStateMachine = RowStreamStateMachine ( )
290
- demandStateMachine. receivedRow ( dataRow)
291
- state = . streaming( columns, demandStateMachine)
292
- let result = QueryResult ( value: . rowDescription( columns) , logger: queryContext. logger)
293
- return . succeedQuery( eventLoopPromise, with: result)
294
- }
295
-
296
- case . unnamed, . executeStatement, . prepareStatement:
297
- return self . setAndFireError ( . unexpectedBackendMessage( . dataRow( dataRow) ) )
298
- }
299
-
300
261
case . drain( let columns) :
301
262
guard dataRow. columnCount == columns. count else {
302
263
return self . setAndFireError ( . unexpectedBackendMessage( . dataRow( dataRow) ) )
303
264
}
304
265
// we ignore all rows and wait for readyForQuery
305
266
return . wait
306
-
267
+
307
268
case . initialized,
308
269
. messagesSent,
309
270
. parseCompleteReceived,
310
271
. parameterDescriptionReceived,
311
272
. noDataMessageReceived,
312
273
. emptyQueryResponseReceived,
274
+ . rowDescriptionReceived,
313
275
. bindCompleteReceived,
314
276
. commandComplete,
315
277
. error:
@@ -330,36 +292,10 @@ struct ExtendedQueryStateMachine {
330
292
return . succeedQuery( eventLoopPromise, with: result)
331
293
}
332
294
333
- case . prepareStatement, . simpleQuery :
295
+ case . prepareStatement:
334
296
preconditionFailure ( " Invalid state: \( self . state) " )
335
297
}
336
-
337
- case . messagesSent( let context) :
338
- switch context. query {
339
- case . simpleQuery( _, let eventLoopGroup) :
340
- return self . avoidingStateMachineCoW { state -> Action in
341
- state = . commandComplete( commandTag: commandTag)
342
- let result = QueryResult ( value: . noRows( . tag( commandTag) ) , logger: context. logger)
343
- return . succeedQuery( eventLoopGroup, with: result)
344
- }
345
-
346
- case . unnamed, . executeStatement, . prepareStatement:
347
- return self . setAndFireError ( . unexpectedBackendMessage( . commandComplete( commandTag) ) )
348
- }
349
-
350
- case . rowDescriptionReceived( let context, _) :
351
- switch context. query {
352
- case . simpleQuery( _, let eventLoopPromise) :
353
- return self . avoidingStateMachineCoW { state -> Action in
354
- state = . commandComplete( commandTag: commandTag)
355
- let result = QueryResult ( value: . noRows( . tag( commandTag) ) , logger: context. logger)
356
- return . succeedQuery( eventLoopPromise, with: result)
357
- }
358
-
359
- case . unnamed, . executeStatement, . prepareStatement:
360
- return self . setAndFireError ( . unexpectedBackendMessage( . commandComplete( commandTag) ) )
361
- }
362
-
298
+
363
299
case . streaming( _, var demandStateMachine) :
364
300
return self . avoidingStateMachineCoW { state -> Action in
365
301
state = . commandComplete( commandTag: commandTag)
@@ -370,12 +306,14 @@ struct ExtendedQueryStateMachine {
370
306
precondition ( self . isCancelled)
371
307
self . state = . commandComplete( commandTag: commandTag)
372
308
return . wait
373
-
309
+
374
310
case . initialized,
311
+ . messagesSent,
375
312
. parseCompleteReceived,
376
313
. parameterDescriptionReceived,
377
314
. noDataMessageReceived,
378
315
. emptyQueryResponseReceived,
316
+ . rowDescriptionReceived,
379
317
. commandComplete,
380
318
. error:
381
319
return self . setAndFireError ( . unexpectedBackendMessage( . commandComplete( commandTag) ) )
@@ -385,32 +323,20 @@ struct ExtendedQueryStateMachine {
385
323
}
386
324
387
325
mutating func emptyQueryResponseReceived( ) -> Action {
388
- switch self . state {
389
- case . bindCompleteReceived( let queryContext) :
390
- switch queryContext. query {
391
- case . unnamed( _, let eventLoopPromise) ,
392
- . executeStatement( _, let eventLoopPromise) :
393
- return self . avoidingStateMachineCoW { state -> Action in
394
- state = . emptyQueryResponseReceived
395
- let result = QueryResult ( value: . noRows( . emptyResponse) , logger: queryContext. logger)
396
- return . succeedQuery( eventLoopPromise, with: result)
397
- }
326
+ guard case . bindCompleteReceived( let queryContext) = self . state else {
327
+ return self . setAndFireError ( . unexpectedBackendMessage( . emptyQueryResponse) )
328
+ }
398
329
399
- case . prepareStatement, . simpleQuery:
400
- return self . setAndFireError ( . unexpectedBackendMessage( . emptyQueryResponse) )
401
- }
402
- case . messagesSent( let queryContext) :
403
- switch queryContext. query {
404
- case . simpleQuery( _, let eventLoopPromise) :
405
- return self . avoidingStateMachineCoW { state -> Action in
406
- state = . emptyQueryResponseReceived
407
- let result = QueryResult ( value: . noRows( . emptyResponse) , logger: queryContext. logger)
408
- return . succeedQuery( eventLoopPromise, with: result)
409
- }
410
- case . unnamed, . executeStatement, . prepareStatement:
411
- return self . setAndFireError ( . unexpectedBackendMessage( . emptyQueryResponse) )
330
+ switch queryContext. query {
331
+ case . unnamed( _, let eventLoopPromise) ,
332
+ . executeStatement( _, let eventLoopPromise) :
333
+ return self . avoidingStateMachineCoW { state -> Action in
334
+ state = . emptyQueryResponseReceived
335
+ let result = QueryResult ( value: . noRows( . emptyResponse) , logger: queryContext. logger)
336
+ return . succeedQuery( eventLoopPromise, with: result)
412
337
}
413
- default :
338
+
339
+ case . prepareStatement( _, _, _, _) :
414
340
return self . setAndFireError ( . unexpectedBackendMessage( . emptyQueryResponse) )
415
341
}
416
342
}
@@ -571,7 +497,7 @@ struct ExtendedQueryStateMachine {
571
497
return . evaluateErrorAtConnectionLevel( error)
572
498
} else {
573
499
switch context. query {
574
- case . unnamed( _, let eventLoopPromise) , . executeStatement( _, let eventLoopPromise) , . simpleQuery ( _ , let eventLoopPromise ) :
500
+ case . unnamed( _, let eventLoopPromise) , . executeStatement( _, let eventLoopPromise) :
575
501
return . failQuery( eventLoopPromise, with: error)
576
502
case . prepareStatement( _, _, _, let eventLoopPromise) :
577
503
return . failPreparedStatementCreation( eventLoopPromise, with: error)
@@ -610,7 +536,7 @@ struct ExtendedQueryStateMachine {
610
536
switch context. query {
611
537
case . prepareStatement:
612
538
return true
613
- case . unnamed, . executeStatement, . simpleQuery :
539
+ case . unnamed, . executeStatement:
614
540
return false
615
541
}
616
542
0 commit comments