From 94bff574d5c1b532f6c599ca26beb1632b4ac7b9 Mon Sep 17 00:00:00 2001 From: atercattus Date: Tue, 20 Apr 2021 10:26:59 +0300 Subject: [PATCH] client - fix rare bug in Conn.readResultStreaming (when MySQL returns OK_packet after SELECT query) --- client/resp.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/client/resp.go b/client/resp.go index 5b6c114c5..33aaa73c1 100644 --- a/client/resp.go +++ b/client/resp.go @@ -242,7 +242,24 @@ func (c *Conn) readResultStreaming(binary bool, result *Result, perRowCb SelectP } if firstPkgBuf[0] == OK_HEADER { - return ErrMalformPacket // Streaming allowed only for SELECT queries + // https://dev.mysql.com/doc/internals/en/com-query-response.html + // 14.6.4.1 COM_QUERY Response + // If the number of columns in the resultset is 0, this is a OK_Packet. + + okResult, err := c.handleOKPacket(firstPkgBuf) + if err != nil { + return errors.Trace(err) + } + + result.Status = okResult.Status + result.AffectedRows = okResult.AffectedRows + result.InsertId = okResult.InsertId + if result.Resultset == nil { + result.Resultset = NewResultset(0) + } else { + result.Reset(0) + } + return nil } else if firstPkgBuf[0] == ERR_HEADER { return c.handleErrorPacket(append([]byte{}, firstPkgBuf...)) } else if firstPkgBuf[0] == LocalInFile_HEADER {