Line data Source code
1 : use crate::config::SslMode;
2 : use crate::tls::TlsConnect;
3 : use crate::{connect_tls, Error};
4 : use bytes::BytesMut;
5 : use postgres_protocol2::message::frontend;
6 : use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt};
7 :
8 0 : pub async fn cancel_query_raw<S, T>(
9 0 : stream: S,
10 0 : mode: SslMode,
11 0 : tls: T,
12 0 : process_id: i32,
13 0 : secret_key: i32,
14 0 : ) -> Result<(), Error>
15 0 : where
16 0 : S: AsyncRead + AsyncWrite + Unpin,
17 0 : T: TlsConnect<S>,
18 0 : {
19 0 : let mut stream = connect_tls::connect_tls(stream, mode, tls).await?;
20 :
21 0 : let mut buf = BytesMut::new();
22 0 : frontend::cancel_request(process_id, secret_key, &mut buf);
23 0 :
24 0 : stream.write_all(&buf).await.map_err(Error::io)?;
25 0 : stream.flush().await.map_err(Error::io)?;
26 0 : stream.shutdown().await.map_err(Error::io)?;
27 :
28 0 : Ok(())
29 0 : }
|