Skip to content

Commit 5b354df

Browse files
authored
Merge pull request jonhoo#11 from datafuse-extras/CLIENT_PROTOCOL_41_MORE
Send ok packet after com field list
2 parents afe0823 + e4c8f3d commit 5b354df

File tree

3 files changed

+32
-12
lines changed

3 files changed

+32
-12
lines changed

src/lib.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,6 @@ impl<B: MysqlShim<W>, R: Read, W: Write> MysqlIntermediary<B, R, W> {
325325
| CapabilityFlags::CLIENT_PLUGIN_AUTH
326326
| CapabilityFlags::CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA
327327
| CapabilityFlags::CLIENT_CONNECT_WITH_DB
328-
| CapabilityFlags::CLIENT_RESERVED
329328
| CapabilityFlags::CLIENT_DEPRECATE_EOF
330329
// | CapabilityFlags::CLIENT_SSL
331330
)
@@ -594,6 +593,16 @@ impl<B: MysqlShim<W>, R: Read, W: Write> MysqlIntermediary<B, R, W> {
594593
cols,
595594
&mut self.writer,
596595
self.client_capabilities,
596+
true,
597+
)?;
598+
let ok_packet = OkResponse {
599+
header: 0xfe,
600+
..Default::default()
601+
};
602+
writers::write_ok_packet(
603+
&mut self.writer,
604+
self.client_capabilities,
605+
ok_packet,
597606
)?;
598607
}
599608
Command::Init(schema) => {

src/resultset.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -372,17 +372,21 @@ impl<'a, W: Write + 'a> RowWriter<'a, W> {
372372
if complete {
373373
if self.columns.is_empty() {
374374
// response to no column query is always an OK packet
375-
let mut resp = OkResponse::default();
376-
resp.info = extra_info.to_string();
375+
let resp = OkResponse {
376+
info: extra_info.to_string(),
377+
..Default::default()
378+
};
377379
self.result.as_mut().unwrap().last_end = Some(Finalizer::Ok(resp));
378380
} else if self
379381
.client_capabilities
380382
.contains(CapabilityFlags::CLIENT_DEPRECATE_EOF)
381383
{
382384
// response to no column query is always an OK packet
383-
let mut resp = OkResponse::default();
384-
resp.info = extra_info.to_string();
385-
resp.header = 0xfe;
385+
let resp = OkResponse {
386+
info: extra_info.to_string(),
387+
header: 0xfe,
388+
..Default::default()
389+
};
386390
self.result.as_mut().unwrap().last_end = Some(Finalizer::Ok(resp));
387391
} else {
388392
// we wrote out at least one row

src/writers.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,13 @@ where
8080
w.write_u16::<LittleEndian>(0)?; // number of warnings
8181
w.end_packet()?;
8282

83-
write_column_definitions_41(pi, w, client_capabilities)?;
84-
write_column_definitions_41(ci, w, client_capabilities)
83+
if pi.len() > 0 {
84+
write_column_definitions_41(pi, w, client_capabilities, false)?;
85+
}
86+
if ci.len() > 0 {
87+
write_column_definitions_41(ci, w, client_capabilities, false)?;
88+
}
89+
Ok(())
8590
}
8691

8792
/// works for Protocol::ColumnDefinition41 is set
@@ -90,12 +95,12 @@ pub(crate) fn write_column_definitions_41<'a, I, W>(
9095
i: I,
9196
w: &mut PacketWriter<W>,
9297
client_capabilities: CapabilityFlags,
98+
is_com_field_list: bool,
9399
) -> io::Result<()>
94100
where
95101
I: IntoIterator<Item = &'a Column>,
96102
W: Write,
97103
{
98-
let mut empty = true;
99104
for c in i {
100105
let c = c.borrow();
101106
use crate::myc::constants::UTF8_GENERAL_CI;
@@ -113,11 +118,13 @@ where
113118
w.write_all(&[0x00])?; // decimals
114119
w.write_all(&[0x00, 0x00])?; // unused
115120

121+
if is_com_field_list {
122+
w.write_all(&[0xfb])?;
123+
}
116124
w.end_packet()?;
117-
empty = false;
118125
}
119126

120-
if !empty && !client_capabilities.contains(CapabilityFlags::CLIENT_DEPRECATE_EOF) {
127+
if !client_capabilities.contains(CapabilityFlags::CLIENT_DEPRECATE_EOF) {
121128
write_eof_packet(w, StatusFlags::empty())
122129
} else {
123130
Ok(())
@@ -137,5 +144,5 @@ where
137144
let i = i.into_iter();
138145
w.write_lenenc_int(i.len() as u64)?;
139146
w.end_packet()?;
140-
write_column_definitions_41(i, w, client_capabilities)
147+
write_column_definitions_41(i, w, client_capabilities, false)
141148
}

0 commit comments

Comments
 (0)