Skip to content

Commit 6cd4652

Browse files
committed
Add RowDescription to SimpleQueryMessage
1 parent 98f5a11 commit 6cd4652

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

tokio-postgres/src/lib.rs

+6
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@
118118
//! | `with-time-0_3` | Enable support for the 0.3 version of the `time` crate. | [time](https://crates.io/crates/time/0.3.0) 0.3 | no |
119119
#![warn(rust_2018_idioms, clippy::all, missing_docs)]
120120

121+
use std::sync::Arc;
122+
123+
use simple_query::SimpleColumn;
124+
121125
pub use crate::cancel_token::CancelToken;
122126
pub use crate::client::Client;
123127
pub use crate::config::Config;
@@ -248,6 +252,8 @@ pub enum SimpleQueryMessage {
248252
///
249253
/// The number of rows modified or selected is returned.
250254
CommandComplete(u64),
255+
/// Column values of the proceeding row values
256+
RowDescription(Arc<[SimpleColumn]>)
251257
}
252258

253259
fn slice_iter<'a>(

tokio-postgres/src/simple_query.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,15 @@ impl Stream for SimpleQueryStream {
9595
return Poll::Ready(Some(Ok(SimpleQueryMessage::CommandComplete(0))));
9696
}
9797
Message::RowDescription(body) => {
98-
let columns = body
98+
let columns: Arc<[SimpleColumn]> = body
9999
.fields()
100100
.map(|f| Ok(SimpleColumn::new(f.name().to_string())))
101101
.collect::<Vec<_>>()
102102
.map_err(Error::parse)?
103103
.into();
104104

105-
*this.columns = Some(columns);
105+
*this.columns = Some(columns.clone());
106+
return Poll::Ready(Some(Ok(SimpleQueryMessage::RowDescription(columns.clone()))));
106107
}
107108
Message::DataRow(body) => {
108109
let row = match &this.columns {

tokio-postgres/tests/test/main.rs

+10-3
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,13 @@ async fn simple_query() {
328328
_ => panic!("unexpected message"),
329329
}
330330
match &messages[2] {
331+
SimpleQueryMessage::RowDescription(columns) => {
332+
assert_eq!(columns.get(0).map(|c| c.name()), Some("id"));
333+
assert_eq!(columns.get(1).map(|c| c.name()), Some("name"));
334+
}
335+
_ => panic!("unexpected message")
336+
}
337+
match &messages[3] {
331338
SimpleQueryMessage::Row(row) => {
332339
assert_eq!(row.columns().get(0).map(|c| c.name()), Some("id"));
333340
assert_eq!(row.columns().get(1).map(|c| c.name()), Some("name"));
@@ -336,7 +343,7 @@ async fn simple_query() {
336343
}
337344
_ => panic!("unexpected message"),
338345
}
339-
match &messages[3] {
346+
match &messages[4] {
340347
SimpleQueryMessage::Row(row) => {
341348
assert_eq!(row.columns().get(0).map(|c| c.name()), Some("id"));
342349
assert_eq!(row.columns().get(1).map(|c| c.name()), Some("name"));
@@ -345,11 +352,11 @@ async fn simple_query() {
345352
}
346353
_ => panic!("unexpected message"),
347354
}
348-
match messages[4] {
355+
match messages[5] {
349356
SimpleQueryMessage::CommandComplete(2) => {}
350357
_ => panic!("unexpected message"),
351358
}
352-
assert_eq!(messages.len(), 5);
359+
assert_eq!(messages.len(), 6);
353360
}
354361

355362
#[tokio::test]

0 commit comments

Comments
 (0)