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