@@ -557,7 +557,7 @@ impl InnerConnection {
557557 let ( stmt_name, _, result_desc) = try!( self . raw_prepare ( query[ ] ) ) ;
558558
559559 let column_types = result_desc. iter ( ) . map ( |desc| desc. ty . clone ( ) ) . collect ( ) ;
560- try!( self . close_statement ( stmt_name[ ] ) ) ;
560+ try!( self . close_statement ( stmt_name[ ] , b'S' ) ) ;
561561
562562 let mut query = vec ! [ ] ;
563563 let _ = write ! ( & mut query, "COPY {} (" , table) ;
@@ -574,24 +574,25 @@ impl InnerConnection {
574574 } )
575575 }
576576
577- fn close_statement ( & mut self , stmt_name : & str ) -> Result < ( ) > {
577+ fn close_statement ( & mut self , name : & str , type_ : u8 ) -> Result < ( ) > {
578578 try!( self . write_messages ( & [
579579 Close {
580- variant : b'S' ,
581- name : stmt_name ,
580+ variant : type_ ,
581+ name : name ,
582582 } ,
583583 Sync ] ) ) ;
584- loop {
585- match try!( self . read_message ( ) ) {
586- ReadyForQuery { .. } => break ,
587- ErrorResponse { fields } => {
588- try!( self . wait_for_ready ( ) ) ;
589- return DbError :: new ( fields) ;
590- }
591- _ => { }
584+ let resp = match try!( self . read_message ( ) ) {
585+ CloseComplete => Ok ( ( ) ) ,
586+ ErrorResponse { fields } => {
587+ DbError :: new ( fields)
592588 }
593- }
594- Ok ( ( ) )
589+ _ => {
590+ self . desynchronized = true ;
591+ return Err ( Error :: BadResponse ) ;
592+ }
593+ } ;
594+ try!( self . wait_for_ready ( ) ) ;
595+ resp
595596 }
596597
597598 fn set_type_names < ' a , I > ( & mut self , mut it : I ) -> Result < ( ) > where I : Iterator < & ' a mut Type > {
@@ -1112,7 +1113,7 @@ impl<'conn> Statement<'conn> {
11121113 fn finish_inner ( & mut self ) -> Result < ( ) > {
11131114 let mut conn = self . conn . conn . borrow_mut ( ) ;
11141115 check_desync ! ( conn) ;
1115- conn. close_statement ( self . name [ ] )
1116+ conn. close_statement ( self . name [ ] , b'S' )
11161117 }
11171118
11181119 fn inner_execute ( & self , portal_name : & str , row_limit : i32 , params : & [ & ToSql ] ) -> Result < ( ) > {
@@ -1306,25 +1307,7 @@ impl<'stmt> Rows<'stmt> {
13061307 fn finish_inner ( & mut self ) -> Result < ( ) > {
13071308 let mut conn = self . stmt . conn . conn . borrow_mut ( ) ;
13081309 check_desync ! ( conn) ;
1309- try!( conn. write_messages ( & [
1310- Close {
1311- variant : b'P' ,
1312- name : self . name [ ]
1313- } ,
1314- Sync ] ) ) ;
1315-
1316- loop {
1317- match try!( conn. read_message ( ) ) {
1318- ReadyForQuery { .. } => break ,
1319- ErrorResponse { fields } => {
1320- try!( conn. wait_for_ready ( ) ) ;
1321- return DbError :: new ( fields) ;
1322- }
1323- _ => { }
1324- }
1325- }
1326-
1327- Ok ( ( ) )
1310+ conn. close_statement ( self . name [ ] , b'P' )
13281311 }
13291312
13301313 fn read_rows ( & mut self ) -> Result < ( ) > {
@@ -1545,7 +1528,7 @@ impl<'a> CopyInStatement<'a> {
15451528 fn finish_inner ( & mut self ) -> Result < ( ) > {
15461529 let mut conn = self . conn . conn . borrow_mut ( ) ;
15471530 check_desync ! ( conn) ;
1548- conn. close_statement ( self . name [ ] )
1531+ conn. close_statement ( self . name [ ] , b'S' )
15491532 }
15501533
15511534 /// Returns a slice containing the expected column types.
0 commit comments