diff --git a/tokio-postgres/src/client.rs b/tokio-postgres/src/client.rs index 427a05049..fe4e23d1f 100644 --- a/tokio-postgres/src/client.rs +++ b/tokio-postgres/src/client.rs @@ -484,14 +484,7 @@ impl Client { return; } - let buf = self.client.inner().with_buf(|buf| { - frontend::query("ROLLBACK", buf).unwrap(); - buf.split().freeze() - }); - let _ = self - .client - .inner() - .send(RequestMessages::Single(FrontendMessage::Raw(buf))); + self.client.__private_api_rollback(None); } } @@ -578,6 +571,21 @@ impl Client { pub fn __private_api_close(&mut self) { self.inner.sender.close_channel() } + + #[doc(hidden)] + pub fn __private_api_rollback(&self, name: Option<&str>) { + let buf = self.inner().with_buf(|buf| { + if let Some(name) = name { + frontend::query(&format!("ROLLBACK TO {}", name), buf).unwrap(); + } else { + frontend::query("ROLLBACK", buf).unwrap(); + } + buf.split().freeze() + }); + let _ = self + .inner() + .send(RequestMessages::Single(FrontendMessage::Raw(buf))); + } } impl fmt::Debug for Client { diff --git a/tokio-postgres/src/transaction.rs b/tokio-postgres/src/transaction.rs index 96a324652..5ed25dd7c 100644 --- a/tokio-postgres/src/transaction.rs +++ b/tokio-postgres/src/transaction.rs @@ -1,5 +1,3 @@ -use crate::codec::FrontendMessage; -use crate::connection::RequestMessages; use crate::copy_out::CopyOutStream; use crate::query::RowStream; #[cfg(feature = "runtime")] @@ -14,7 +12,6 @@ use crate::{ }; use bytes::Buf; use futures_util::TryStreamExt; -use postgres_protocol::message::frontend; use tokio::io::{AsyncRead, AsyncWrite}; /// A representation of a PostgreSQL database transaction. @@ -39,19 +36,8 @@ impl<'a> Drop for Transaction<'a> { return; } - let query = if let Some(sp) = self.savepoint.as_ref() { - format!("ROLLBACK TO {}", sp.name) - } else { - "ROLLBACK".to_string() - }; - let buf = self.client.inner().with_buf(|buf| { - frontend::query(&query, buf).unwrap(); - buf.split().freeze() - }); - let _ = self - .client - .inner() - .send(RequestMessages::Single(FrontendMessage::Raw(buf))); + let name = self.savepoint.as_ref().map(|sp| sp.name.as_str()); + self.client.__private_api_rollback(name); } }