(binary bool, result *Result, perRowCb SelectPerRowCallback)
| 236 | } |
| 237 | |
| 238 | func (c *Conn) readResultStreaming(binary bool, result *Result, perRowCb SelectPerRowCallback) error { |
| 239 | firstPkgBuf, err := c.ReadPacketReuseMem(utils.ByteSliceGet(16)[:0]) |
| 240 | defer utils.ByteSlicePut(firstPkgBuf) |
| 241 | |
| 242 | if err != nil { |
| 243 | return errors.Trace(err) |
| 244 | } |
| 245 | |
| 246 | if firstPkgBuf[0] == OK_HEADER { |
| 247 | // https://dev.mysql.com/doc/internals/en/com-query-response.html |
| 248 | // 14.6.4.1 COM_QUERY Response |
| 249 | // If the number of columns in the resultset is 0, this is a OK_Packet. |
| 250 | |
| 251 | okResult, err := c.handleOKPacket(firstPkgBuf) |
| 252 | if err != nil { |
| 253 | return errors.Trace(err) |
| 254 | } |
| 255 | |
| 256 | result.Status = okResult.Status |
| 257 | result.AffectedRows = okResult.AffectedRows |
| 258 | result.InsertId = okResult.InsertId |
| 259 | result.Warnings = okResult.Warnings |
| 260 | if result.Resultset == nil { |
| 261 | result.Resultset = NewResultset(0) |
| 262 | } else { |
| 263 | result.Reset(0) |
| 264 | } |
| 265 | return nil |
| 266 | } else if firstPkgBuf[0] == ERR_HEADER { |
| 267 | return c.handleErrorPacket(append([]byte{}, firstPkgBuf...)) |
| 268 | } else if firstPkgBuf[0] == LocalInFile_HEADER { |
| 269 | return ErrMalformPacket |
| 270 | } |
| 271 | |
| 272 | return c.readResultsetStreaming(firstPkgBuf, binary, result, perRowCb) |
| 273 | } |
| 274 | |
| 275 | func (c *Conn) readResultset(data []byte, binary bool) (*Result, error) { |
| 276 | // column count |
no test coverage detected