Skip to content

Commit daa27eb

Browse files
authored
fix a rare bug in Conn.readResultStreaming (when MySQL returns OK_packet after SELECT query) (#573)
1 parent 609df4e commit daa27eb

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

client/resp.go

+18-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,24 @@ func (c *Conn) readResultStreaming(binary bool, result *Result, perRowCb SelectP
242242
}
243243

244244
if firstPkgBuf[0] == OK_HEADER {
245-
return ErrMalformPacket // Streaming allowed only for SELECT queries
245+
// https://dev.mysql.com/doc/internals/en/com-query-response.html
246+
// 14.6.4.1 COM_QUERY Response
247+
// If the number of columns in the resultset is 0, this is a OK_Packet.
248+
249+
okResult, err := c.handleOKPacket(firstPkgBuf)
250+
if err != nil {
251+
return errors.Trace(err)
252+
}
253+
254+
result.Status = okResult.Status
255+
result.AffectedRows = okResult.AffectedRows
256+
result.InsertId = okResult.InsertId
257+
if result.Resultset == nil {
258+
result.Resultset = NewResultset(0)
259+
} else {
260+
result.Reset(0)
261+
}
262+
return nil
246263
} else if firstPkgBuf[0] == ERR_HEADER {
247264
return c.handleErrorPacket(append([]byte{}, firstPkgBuf...))
248265
} else if firstPkgBuf[0] == LocalInFile_HEADER {

0 commit comments

Comments
 (0)