diff --git a/tokio-postgres/src/client.rs b/tokio-postgres/src/client.rs index 955435cd6..78f295e30 100644 --- a/tokio-postgres/src/client.rs +++ b/tokio-postgres/src/client.rs @@ -506,28 +506,72 @@ impl Client { #[async_trait] impl GenericClient for Client { - async fn execute(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result + async fn execute(&self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result where T: ?Sized + ToStatement + Sync + Send, { self.execute(query, params).await } - async fn query( - &mut self, - query: &T, - params: &[&(dyn ToSql + Sync)], - ) -> Result, Error> + async fn execute_raw<'b, I, T>(&self, statement: &T, params: I) -> Result + where + T: ?Sized + ToStatement + Sync + Send, + I: IntoIterator + Sync + Send, + I::IntoIter: ExactSizeIterator, + { + self.execute_raw(statement, params).await + } + + async fn query(&self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result, Error> where T: ?Sized + ToStatement + Sync + Send, { self.query(query, params).await } - async fn prepare(&mut self, query: &str) -> Result { + async fn query_one( + &self, + statement: &T, + params: &[&(dyn ToSql + Sync)], + ) -> Result + where + T: ?Sized + ToStatement + Sync + Send, + { + self.query_one(statement, params).await + } + + async fn query_opt( + &self, + statement: &T, + params: &[&(dyn ToSql + Sync)], + ) -> Result, Error> + where + T: ?Sized + ToStatement + Sync + Send, + { + self.query_opt(statement, params).await + } + + async fn query_raw<'b, T, I>(&self, statement: &T, params: I) -> Result + where + T: ?Sized + ToStatement + Sync + Send, + I: IntoIterator + Sync + Send, + I::IntoIter: ExactSizeIterator, + { + self.query_raw(statement, params).await + } + + async fn prepare(&self, query: &str) -> Result { self.prepare(query).await } + async fn prepare_typed( + &self, + query: &str, + parameter_types: &[Type], + ) -> Result { + self.prepare_typed(query, parameter_types).await + } + async fn transaction(&mut self) -> Result, Error> { self.transaction().await } diff --git a/tokio-postgres/src/generic_client.rs b/tokio-postgres/src/generic_client.rs index 949ad4f06..cfbd83e93 100644 --- a/tokio-postgres/src/generic_client.rs +++ b/tokio-postgres/src/generic_client.rs @@ -1,4 +1,5 @@ -use crate::types::ToSql; +use crate::query::RowStream; +use crate::types::{ToSql, Type}; use crate::{Error, Row, Statement, ToStatement, Transaction}; use async_trait::async_trait; @@ -6,21 +7,56 @@ use async_trait::async_trait; #[async_trait] pub trait GenericClient { /// Like `Client::execute`. - async fn execute(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result + async fn execute(&self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result where T: ?Sized + ToStatement + Sync + Send; + /// Like `Client::execute_raw`. + async fn execute_raw<'b, I, T>(&self, statement: &T, params: I) -> Result + where + T: ?Sized + ToStatement + Sync + Send, + I: IntoIterator + Sync + Send, + I::IntoIter: ExactSizeIterator; + /// Like `Client::query`. - async fn query( - &mut self, - query: &T, + async fn query(&self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result, Error> + where + T: ?Sized + ToStatement + Sync + Send; + + /// Like `Client::query_one`. + async fn query_one( + &self, + statement: &T, + params: &[&(dyn ToSql + Sync)], + ) -> Result + where + T: ?Sized + ToStatement + Sync + Send; + + /// Like `Client::query_opt`. + async fn query_opt( + &self, + statement: &T, params: &[&(dyn ToSql + Sync)], - ) -> Result, Error> + ) -> Result, Error> where T: ?Sized + ToStatement + Sync + Send; + /// Like `Client::query_raw`. + async fn query_raw<'b, T, I>(&self, statement: &T, params: I) -> Result + where + T: ?Sized + ToStatement + Sync + Send, + I: IntoIterator + Sync + Send, + I::IntoIter: ExactSizeIterator; + /// Like `Client::prepare`. - async fn prepare(&mut self, query: &str) -> Result; + async fn prepare(&self, query: &str) -> Result; + + /// Like `Client::prepare_typed`. + async fn prepare_typed( + &self, + query: &str, + parameter_types: &[Type], + ) -> Result; /// Like `Client::transaction`. async fn transaction(&mut self) -> Result, Error>; diff --git a/tokio-postgres/src/transaction.rs b/tokio-postgres/src/transaction.rs index 75a939302..c75087377 100644 --- a/tokio-postgres/src/transaction.rs +++ b/tokio-postgres/src/transaction.rs @@ -289,28 +289,72 @@ impl<'a> Transaction<'a> { #[async_trait] impl crate::GenericClient for Transaction<'_> { - async fn execute(&mut self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result + async fn execute(&self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result where T: ?Sized + ToStatement + Sync + Send, { self.execute(query, params).await } - async fn query( - &mut self, - query: &T, - params: &[&(dyn ToSql + Sync)], - ) -> Result, Error> + async fn execute_raw<'b, I, T>(&self, statement: &T, params: I) -> Result + where + T: ?Sized + ToStatement + Sync + Send, + I: IntoIterator + Sync + Send, + I::IntoIter: ExactSizeIterator, + { + self.execute_raw(statement, params).await + } + + async fn query(&self, query: &T, params: &[&(dyn ToSql + Sync)]) -> Result, Error> where T: ?Sized + ToStatement + Sync + Send, { self.query(query, params).await } - async fn prepare(&mut self, query: &str) -> Result { + async fn query_one( + &self, + statement: &T, + params: &[&(dyn ToSql + Sync)], + ) -> Result + where + T: ?Sized + ToStatement + Sync + Send, + { + self.query_one(statement, params).await + } + + async fn query_opt( + &self, + statement: &T, + params: &[&(dyn ToSql + Sync)], + ) -> Result, Error> + where + T: ?Sized + ToStatement + Sync + Send, + { + self.query_opt(statement, params).await + } + + async fn query_raw<'b, T, I>(&self, statement: &T, params: I) -> Result + where + T: ?Sized + ToStatement + Sync + Send, + I: IntoIterator + Sync + Send, + I::IntoIter: ExactSizeIterator, + { + self.query_raw(statement, params).await + } + + async fn prepare(&self, query: &str) -> Result { self.prepare(query).await } + async fn prepare_typed( + &self, + query: &str, + parameter_types: &[Type], + ) -> Result { + self.prepare_typed(query, parameter_types).await + } + #[allow(clippy::needless_lifetimes)] async fn transaction<'a>(&'a mut self) -> Result, Error> { self.transaction().await