diff --git a/go/mysql/conn.go b/go/mysql/conn.go index 34b219e7824..dfb4dde2eec 100644 --- a/go/mysql/conn.go +++ b/go/mysql/conn.go @@ -1236,7 +1236,7 @@ func (c *Conn) handleNextCommand(ctx context.Context, handler Handler) error { return err } case ComStmtSendLongData: - stmtID, paramID, chunkData, ok := c.parseComStmtSendLongData(data) + stmtID, paramID, chunk, ok := c.parseComStmtSendLongData(data) c.recycleReadPacket() if !ok { err := fmt.Errorf("error parsing statement send long data from client %v, returning error: %v", c.ConnectionID, data) @@ -1259,9 +1259,6 @@ func (c *Conn) handleNextCommand(ctx context.Context, handler Handler) error { return err } - chunk := make([]byte, len(chunkData)) - copy(chunk, chunkData) - key := fmt.Sprintf("v%d", paramID+1) if val, ok := prepare.BindVars[key]; ok { val.Value = append(val.Value, chunk...) diff --git a/go/mysql/query.go b/go/mysql/query.go index ef9c81a1ac2..b1c59303ceb 100644 --- a/go/mysql/query.go +++ b/go/mysql/query.go @@ -933,7 +933,11 @@ func (c *Conn) parseComStmtSendLongData(data []byte) (uint32, uint16, []byte, bo return 0, 0, nil, false } - return statementID, paramID, data[pos:], true + chunkData := data[pos:] + chunk := make([]byte, len(chunkData)) + copy(chunk, chunkData) + + return statementID, paramID, chunk, true } func (c *Conn) parseComStmtClose(data []byte) (uint32, bool) {