Skip to content

Commit 23701a2

Browse files
committed
avoid data copy on flush
1 parent 515e299 commit 23701a2

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

sqlx-core/src/mssql/connection/stream.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::ops::{Deref, DerefMut};
22

33
use bytes::{Bytes, BytesMut};
4-
use sqlx_rt::TcpStream;
4+
use sqlx_rt::{AsyncWriteExt, TcpStream};
55

66
use crate::error::Error;
77
use crate::ext::ustr::UStr;
@@ -96,12 +96,11 @@ impl MssqlStream {
9696
pub(crate) async fn flush(&mut self) -> Result<(), Error> {
9797
// flush self.max_packet_size bytes at a time
9898
if self.inner.wbuf.len() > self.max_packet_size {
99-
let rest = self.inner.wbuf.split_off(self.max_packet_size);
100-
self.inner.flush().await?;
101-
for chunk in rest.chunks(self.max_packet_size) {
102-
self.inner.wbuf.extend_from_slice(chunk);
103-
self.inner.flush().await?;
99+
for chunk in self.inner.wbuf.chunks(self.max_packet_size) {
100+
self.inner.stream.write_all(chunk).await?;
101+
self.inner.stream.flush().await?;
104102
}
103+
self.inner.wbuf.clear();
105104
} else {
106105
self.inner.flush().await?;
107106
}

0 commit comments

Comments
 (0)