@@ -96,7 +96,7 @@ impl PreparedStatements {
9696 match message {
9797 Some ( message) => {
9898 self . state . add_ignore ( '1' , bind. statement ( ) ) ;
99- self . prepared ( bind. statement ( ) ) ;
99+ self . parses . push_back ( bind. statement ( ) . to_string ( ) ) ;
100100 self . state . add ( '2' ) ;
101101 return Ok ( HandleResult :: Prepend ( message) ) ;
102102 }
@@ -116,7 +116,7 @@ impl PreparedStatements {
116116 match message {
117117 Some ( message) => {
118118 self . state . add_ignore ( '1' , describe. statement ( ) ) ;
119- self . prepared ( describe. statement ( ) ) ;
119+ self . parses . push_back ( describe. statement ( ) . to_string ( ) ) ;
120120 self . state . add ( ExecutionCode :: DescriptionOrNothing ) ; // t
121121 self . state . add ( ExecutionCode :: DescriptionOrNothing ) ; // T
122122 return Ok ( HandleResult :: Prepend ( message) ) ;
@@ -156,7 +156,6 @@ impl PreparedStatements {
156156 self . state . add_simulated ( ParseComplete . message ( ) ?) ;
157157 return Ok ( HandleResult :: Drop ) ;
158158 } else {
159- self . prepared ( parse. name ( ) ) ;
160159 self . state . add ( '1' ) ;
161160 self . parses . push_back ( parse. name ( ) . to_string ( ) ) ;
162161 }
@@ -225,7 +224,9 @@ impl PreparedStatements {
225224 }
226225
227226 '1' => {
228- self . parses . pop_front ( ) ;
227+ if let Some ( name) = self . parses . pop_front ( ) {
228+ self . prepared ( & name) ;
229+ }
229230 }
230231
231232 'G' => {
@@ -266,7 +267,7 @@ impl PreparedStatements {
266267 }
267268
268269 fn check_prepared ( & mut self , name : & str ) -> Result < Option < ProtocolMessage > , Error > {
269- if !self . contains ( name) {
270+ if !self . contains ( name) && ! self . parses . iter ( ) . any ( |s| s == name ) {
270271 let parse = self . parse ( name) ;
271272 if let Some ( parse) = parse {
272273 Ok ( Some ( ProtocolMessage :: Parse ( parse) ) )
0 commit comments