@@ -7,21 +7,28 @@ impl QueryEngine {
77 & mut self ,
88 context : & mut QueryEngineContext < ' _ > ,
99 rollback : bool ,
10+ extended : bool ,
1011 ) -> Result < ( ) , Error > {
11- let cmd = if rollback {
12- CommandComplete :: new_rollback ( )
12+ let bytes_sent = if extended {
13+ self . extended_transaction_reply ( context, false , rollback)
14+ . await ?
1315 } else {
14- CommandComplete :: new_commit ( )
16+ let cmd = if rollback {
17+ CommandComplete :: new_rollback ( )
18+ } else {
19+ CommandComplete :: new_commit ( )
20+ } ;
21+ let mut messages = if !context. in_transaction ( ) {
22+ vec ! [ NoticeResponse :: from( ErrorResponse :: no_transaction( ) ) . message( ) ?]
23+ } else {
24+ vec ! [ ]
25+ } ;
26+ messages. push ( cmd. message ( ) ?. backend ( ) ) ;
27+ messages. push ( ReadyForQuery :: idle ( ) . message ( ) ?) ;
28+
29+ context. stream . send_many ( & messages) . await ?
1530 } ;
16- let mut messages = if !context. in_transaction ( ) {
17- vec ! [ NoticeResponse :: from( ErrorResponse :: no_transaction( ) ) . message( ) ?]
18- } else {
19- vec ! [ ]
20- } ;
21- messages. push ( cmd. message ( ) ?. backend ( ) ) ;
22- messages. push ( ReadyForQuery :: idle ( ) . message ( ) ?) ;
2331
24- let bytes_sent = context. stream . send_many ( & messages) . await ?;
2532 self . stats . sent ( bytes_sent) ;
2633 self . begin_stmt = None ;
2734 context. transaction = None ; // Clear transaction state
@@ -34,6 +41,7 @@ impl QueryEngine {
3441 context : & mut QueryEngineContext < ' _ > ,
3542 route : & Route ,
3643 rollback : bool ,
44+ extended : bool ,
3745 ) -> Result < ( ) , Error > {
3846 let cluster = self . backend . cluster ( ) ?;
3947
@@ -54,7 +62,7 @@ impl QueryEngine {
5462 self . cleanup_backend ( context) ;
5563
5664 // Tell client we finished the transaction.
57- self . end_not_connected ( context, false ) . await ?;
65+ self . end_not_connected ( context, false , extended ) . await ?;
5866 } else {
5967 self . execute ( context, route) . await ?;
6068 }
@@ -105,7 +113,7 @@ mod tests {
105113 let mut engine = QueryEngine :: default ( ) ;
106114 // state copied from client
107115 let mut context = QueryEngineContext :: new ( & mut client) ;
108- let result = engine. end_not_connected ( & mut context, false ) . await ;
116+ let result = engine. end_not_connected ( & mut context, false , false ) . await ;
109117 assert ! ( result. is_ok( ) , "end_transaction should succeed" ) ;
110118
111119 assert_eq ! (
0 commit comments