Skip to content
This repository was archived by the owner on Apr 25, 2023. It is now read-only.

Commit 608e75c

Browse files
author
Julius de Bruijn
committed
Skip a few loops by using describe's column info
1 parent a12e0f8 commit 608e75c

File tree

1 file changed

+7
-19
lines changed

1 file changed

+7
-19
lines changed

src/connector/postgres.rs

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@ mod error;
55
use crate::{
66
ast::{Query, Value},
77
connector::{bind::Bind, metrics, queryable::*, timeout::timeout, ResultSet, Transaction},
8-
error::Error,
98
visitor::{self, Visitor},
109
};
1110
use async_trait::async_trait;
1211
pub use config::*;
1312
use either::Either;
14-
use futures::{lock::Mutex, TryStreamExt};
15-
use sqlx::{Column as _, Connect, Executor, PgConnection, Row as _};
13+
use futures::lock::Mutex;
14+
use sqlx::{Column as _, Connect, Executor, PgConnection};
1615
use std::time::Duration;
1716

1817
/// A connector interface for the PostgreSQL database.
@@ -71,6 +70,7 @@ impl Queryable for PostgreSql {
7170
metrics::query_new("postgres.query_raw", sql, params, |params| async move {
7271
let mut conn = self.connection.lock().await;
7372
let describe = timeout(self.socket_timeout, conn.describe(sql)).await?;
73+
let columns = describe.columns().into_iter().map(|c| c.name().to_string()).collect();
7474

7575
let mut query = sqlx::query(sql);
7676

@@ -90,22 +90,10 @@ impl Queryable for PostgreSql {
9090
}
9191
};
9292

93-
let mut columns = Vec::new();
94-
let mut rows = Vec::new();
95-
96-
timeout(self.socket_timeout, async {
97-
let mut stream = query.fetch(&mut *conn);
98-
99-
while let Some(row) = stream.try_next().await? {
100-
if columns.is_empty() {
101-
columns = row.columns().iter().map(|c| c.name().to_string()).collect();
102-
}
103-
104-
rows.push(conversion::map_row(row)?);
105-
}
106-
107-
Ok::<(), Error>(())
108-
})
93+
let rows = timeout(
94+
self.socket_timeout,
95+
query.try_map(conversion::map_row).fetch_all(&mut *conn),
96+
)
10997
.await?;
11098

11199
Ok(ResultSet::new(columns, rows))

0 commit comments

Comments
 (0)