Skip to content

Commit 4cae654

Browse files
authored
Another attempt at prep stmt fix (#561)
1 parent 4ef542c commit 4cae654

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

pgdog/src/backend/prepared_statements.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)