Skip to content

Commit 3a4152a

Browse files
xzhangxian1008ti-chi-bot
authored andcommitted
This is an automated cherry-pick of pingcap#61808
Signed-off-by: ti-chi-bot <[email protected]>
1 parent 6f8a5f8 commit 3a4152a

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed

pkg/executor/aggfuncs/spill_deserialize_helper.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package aggfuncs
1616

1717
import (
18+
"bytes"
19+
1820
"github.com/pingcap/tidb/pkg/util/chunk"
1921
"github.com/pingcap/tidb/pkg/util/hack"
2022
util "github.com/pingcap/tidb/pkg/util/serialization"
@@ -216,8 +218,13 @@ func (s *deserializeHelper) deserializePartialResult4SumFloat64(dst *partialResu
216218
func (s *deserializeHelper) deserializeBasePartialResult4GroupConcat(dst *basePartialResult4GroupConcat) bool {
217219
if s.readRowIndex < s.totalRowCnt {
218220
s.pab.Reset(s.column, s.readRowIndex)
219-
dst.valsBuf = util.DeserializeBytesBuffer(s.pab)
220-
dst.buffer = util.DeserializeBytesBuffer(s.pab)
221+
dst.valsBuf = &bytes.Buffer{}
222+
hasBuffer := util.DeserializeBool(s.pab)
223+
if hasBuffer {
224+
dst.buffer = util.DeserializeBytesBuffer(s.pab)
225+
} else {
226+
dst.buffer = nil
227+
}
221228
s.readRowIndex++
222229
return true
223230
}

pkg/executor/aggfuncs/spill_helper_test.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import (
2525
"github.com/stretchr/testify/require"
2626
)
2727

28-
var testLongStr1 string = getLongString("平p凯k星x辰c")
29-
var testLongStr2 string = getLongString("123aa啊啊aa")
28+
var testLongStr1 string = getLongString("平352p凯额6辰c")
29+
var testLongStr2 string = getLongString("123a啊f24f去rsgvsfg")
3030

3131
func getChunk() *chunk.Chunk {
3232
fieldTypes := make([]*types.FieldType, 1)
@@ -746,13 +746,15 @@ func TestPartialResult4SumFloat64(t *testing.T) {
746746

747747
func TestBasePartialResult4GroupConcat(t *testing.T) {
748748
var serializeHelper = NewSerializeHelper()
749+
serializeHelper.buf = make([]byte, 0)
749750
bufSizeChecker := newBufferSizeChecker()
750751

751752
// Initialize test data
752753
expectData := []basePartialResult4GroupConcat{
754+
{valsBuf: bytes.NewBufferString("123"), buffer: nil},
753755
{valsBuf: bytes.NewBufferString(""), buffer: bytes.NewBufferString("")},
754-
{valsBuf: bytes.NewBufferString("xzxx"), buffer: bytes.NewBufferString(testLongStr2)},
755-
{valsBuf: bytes.NewBufferString(testLongStr1), buffer: bytes.NewBufferString(testLongStr2)},
756+
{valsBuf: bytes.NewBufferString(""), buffer: bytes.NewBufferString(testLongStr1)},
757+
{valsBuf: bytes.NewBufferString(""), buffer: bytes.NewBufferString(testLongStr2)},
756758
}
757759
serializedPartialResults := make([]PartialResult, len(expectData))
758760
testDataNum := len(serializedPartialResults)
@@ -786,9 +788,18 @@ func TestBasePartialResult4GroupConcat(t *testing.T) {
786788

787789
// Check some results
788790
require.Equal(t, testDataNum, index)
791+
<<<<<<< HEAD
789792
for i := 0; i < testDataNum; i++ {
790793
require.Equal(t, (*basePartialResult4GroupConcat)(serializedPartialResults[i]).valsBuf.String(), deserializedPartialResults[i].valsBuf.String())
791794
require.Equal(t, (*basePartialResult4GroupConcat)(serializedPartialResults[i]).buffer.String(), deserializedPartialResults[i].buffer.String())
795+
=======
796+
for i := range testDataNum {
797+
if (*basePartialResult4GroupConcat)(serializedPartialResults[i]).buffer != nil {
798+
require.Equal(t, (*basePartialResult4GroupConcat)(serializedPartialResults[i]).buffer.String(), deserializedPartialResults[i].buffer.String())
799+
} else {
800+
require.Equal(t, (*bytes.Buffer)(nil), deserializedPartialResults[i].buffer)
801+
}
802+
>>>>>>> 221d76f9ebd (executor: fix nil buffer in basePartialResult4GroupConcat when hash aggregation is spilled (#61808))
792803
}
793804
}
794805

pkg/executor/aggfuncs/spill_serialize_helper.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,12 @@ func (s *SerializeHelper) serializePartialResult4SumFloat64(value partialResult4
131131

132132
func (s *SerializeHelper) serializeBasePartialResult4GroupConcat(value basePartialResult4GroupConcat) []byte {
133133
s.buf = s.buf[:0]
134-
s.buf = util.SerializeBytesBuffer(value.valsBuf, s.buf)
135-
s.buf = util.SerializeBytesBuffer(value.buffer, s.buf)
134+
if value.buffer != nil {
135+
s.buf = util.SerializeBool(true, s.buf)
136+
s.buf = util.SerializeBytesBuffer(value.buffer, s.buf)
137+
} else {
138+
s.buf = util.SerializeBool(false, s.buf)
139+
}
136140
return s.buf
137141
}
138142

0 commit comments

Comments
 (0)