Skip to content

Commit 349f376

Browse files
committed
Don't bother waiting for a ReadyForQuery
We use it in the connection to track framing but don't need to wait around for it in the individual futures/streams
1 parent dcde61c commit 349f376

File tree

3 files changed

+7
-82
lines changed

3 files changed

+7
-82
lines changed

tokio-postgres/src/proto/execute.rs

+3-30
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,8 @@ pub enum Execute {
1515
request: PendingRequest,
1616
statement: Statement,
1717
},
18-
#[state_machine_future(transitions(ReadReadyForQuery))]
19-
ReadResponse { receiver: mpsc::Receiver<Message> },
2018
#[state_machine_future(transitions(Finished))]
21-
ReadReadyForQuery {
22-
receiver: mpsc::Receiver<Message>,
23-
rows: u64,
24-
},
19+
ReadResponse { receiver: mpsc::Receiver<Message> },
2520
#[state_machine_future(ready)]
2621
Finished(u64),
2722
#[state_machine_future(error)]
@@ -56,36 +51,14 @@ impl PollExecute for Execute {
5651
.unwrap()
5752
.parse()
5853
.unwrap_or(0);
59-
let state = state.take();
60-
transition!(ReadReadyForQuery {
61-
receiver: state.receiver,
62-
rows,
63-
});
64-
}
65-
Some(Message::EmptyQueryResponse) => {
66-
let state = state.take();
67-
transition!(ReadReadyForQuery {
68-
receiver: state.receiver,
69-
rows: 0,
70-
});
54+
transition!(Finished(rows))
7155
}
56+
Some(Message::EmptyQueryResponse) => transition!(Finished(0)),
7257
Some(_) => return Err(Error::unexpected_message()),
7358
None => return Err(Error::closed()),
7459
}
7560
}
7661
}
77-
78-
fn poll_read_ready_for_query<'a>(
79-
state: &'a mut RentToOwn<'a, ReadReadyForQuery>,
80-
) -> Poll<AfterReadReadyForQuery, Error> {
81-
let message = try_ready_receive!(state.receiver.poll());
82-
83-
match message {
84-
Some(Message::ReadyForQuery(_)) => transition!(Finished(state.rows)),
85-
Some(_) => Err(Error::unexpected_message()),
86-
None => Err(Error::closed()),
87-
}
88-
}
8962
}
9063

9164
impl ExecuteFuture {

tokio-postgres/src/proto/prepare.rs

+3-32
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,12 @@ pub enum Prepare {
3232
receiver: mpsc::Receiver<Message>,
3333
name: String,
3434
},
35-
#[state_machine_future(transitions(ReadReadyForQuery))]
36-
ReadRowDescription {
37-
client: Client,
38-
receiver: mpsc::Receiver<Message>,
39-
name: String,
40-
parameters: Vec<Oid>,
41-
},
4235
#[state_machine_future(transitions(GetParameterTypes, GetColumnTypes, Finished))]
43-
ReadReadyForQuery {
36+
ReadRowDescription {
4437
client: Client,
4538
receiver: mpsc::Receiver<Message>,
4639
name: String,
4740
parameters: Vec<Oid>,
48-
columns: Vec<(String, Oid)>,
4941
},
5042
#[state_machine_future(transitions(GetColumnTypes, Finished))]
5143
GetParameterTypes {
@@ -135,39 +127,18 @@ impl PollPrepare for Prepare {
135127
None => return Err(Error::closed()),
136128
};
137129

138-
transition!(ReadReadyForQuery {
139-
receiver: state.receiver,
140-
name: state.name,
141-
parameters: state.parameters,
142-
columns,
143-
client: state.client,
144-
})
145-
}
146-
147-
fn poll_read_ready_for_query<'a>(
148-
state: &'a mut RentToOwn<'a, ReadReadyForQuery>,
149-
) -> Poll<AfterReadReadyForQuery, Error> {
150-
let message = try_ready_receive!(state.receiver.poll());
151-
let state = state.take();
152-
153-
match message {
154-
Some(Message::ReadyForQuery(_)) => {}
155-
Some(_) => return Err(Error::unexpected_message()),
156-
None => return Err(Error::closed()),
157-
}
158-
159130
let mut parameters = state.parameters.into_iter();
160131
if let Some(oid) = parameters.next() {
161132
transition!(GetParameterTypes {
162133
future: TypeinfoFuture::new(oid, state.client),
163134
remaining_parameters: parameters,
164135
name: state.name,
165136
parameters: vec![],
166-
columns: state.columns,
137+
columns: columns,
167138
});
168139
}
169140

170-
let mut columns = state.columns.into_iter();
141+
let mut columns = columns.into_iter();
171142
if let Some((name, oid)) = columns.next() {
172143
transition!(GetColumnTypes {
173144
future: TypeinfoFuture::new(oid, state.client),

tokio-postgres/src/proto/query.rs

+1-20
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ enum State {
1818
receiver: mpsc::Receiver<Message>,
1919
statement: Statement,
2020
},
21-
ReadingReadyForQuery {
22-
receiver: mpsc::Receiver<Message>,
23-
},
2421
Done,
2522
}
2623

@@ -77,28 +74,12 @@ impl Stream for QueryStream {
7774
break Ok(Async::Ready(Some(row)));
7875
}
7976
Some(Message::EmptyQueryResponse) | Some(Message::CommandComplete(_)) => {
80-
self.0 = State::ReadingReadyForQuery { receiver };
77+
break Ok(Async::Ready(None));
8178
}
8279
Some(_) => break Err(Error::unexpected_message()),
8380
None => break Err(Error::closed()),
8481
}
8582
}
86-
State::ReadingReadyForQuery { mut receiver } => {
87-
let message = match receiver.poll() {
88-
Ok(Async::Ready(message)) => message,
89-
Ok(Async::NotReady) => {
90-
self.0 = State::ReadingReadyForQuery { receiver };
91-
break Ok(Async::NotReady);
92-
}
93-
Err(()) => unreachable!("mpsc::Receiver doesn't return errors"),
94-
};
95-
96-
match message {
97-
Some(Message::ReadyForQuery(_)) => break Ok(Async::Ready(None)),
98-
Some(_) => break Err(Error::unexpected_message()),
99-
None => break Err(Error::closed()),
100-
}
101-
}
10283
State::Done => break Ok(Async::Ready(None)),
10384
}
10485
}

0 commit comments

Comments
 (0)