Skip to content

Commit 29e26f9

Browse files
authored
Reset BytesBuffer after each rowBatch (#2811)
1 parent e45961d commit 29e26f9

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

server/handler.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,12 @@ func (h *Handler) resultForDefaultIter(ctx *sql.Context, c *mysql.Conn, schema s
634634
timer := time.NewTimer(waitTime)
635635
defer timer.Stop()
636636

637+
// Wrap the callback to include a BytesBuffer.Reset() to clean out rows that have already been spooled
638+
resetCallback := func(r *sqltypes.Result, more bool) error {
639+
defer buf.Reset()
640+
return callback(r, more)
641+
}
642+
637643
// Reads rows from the channel, converts them to wire format,
638644
// and calls |callback| to give them to vitess.
639645
eg.Go(func() error {
@@ -645,7 +651,7 @@ func (h *Handler) resultForDefaultIter(ctx *sql.Context, c *mysql.Conn, schema s
645651
r = &sqltypes.Result{Fields: resultFields}
646652
}
647653
if r.RowsAffected == rowsBatch {
648-
if err := callback(r, more); err != nil {
654+
if err := resetCallback(r, more); err != nil {
649655
return err
650656
}
651657
r = nil

0 commit comments

Comments
 (0)