@@ -18,13 +18,13 @@ import (
1818 "bytes"
1919 "context"
2020 "fmt"
21+ "io"
2122
2223 "github.com/matrixorigin/matrixone/pkg/common/bitmap"
2324 "github.com/matrixorigin/matrixone/pkg/common/moerr"
2425 "github.com/matrixorigin/matrixone/pkg/common/mpool"
2526 "github.com/matrixorigin/matrixone/pkg/container/types"
2627 "github.com/matrixorigin/matrixone/pkg/container/vector"
27- "github.com/matrixorigin/matrixone/pkg/sql/colexec/aggexec"
2828)
2929
3030func New (attrs []string ) * Batch {
@@ -145,37 +145,9 @@ func (bat *Batch) MarshalBinaryWithBuffer(w *bytes.Buffer) ([]byte, error) {
145145 }
146146 }
147147
148- // ExtraBuf1
149- size := int32 (len (bat .ExtraBuf1 ))
150- w .Write (types .EncodeInt32 (& size ))
151- if size > 0 {
152- w .Write (bat .ExtraBuf1 )
153- }
154-
155- // ExtraBuf2
156- size = int32 (len (bat .ExtraBuf2 ))
157- w .Write (types .EncodeInt32 (& size ))
158- if size > 0 {
159- w .Write (bat .ExtraBuf2 )
160- }
161-
162- // AggInfos
163- aggInfos := make ([][]byte , len (bat .Aggs ))
164- for i , exec := range bat .Aggs {
165- data , err := aggexec .MarshalAggFuncExec (exec )
166- if err != nil {
167- return nil , err
168- }
169- aggInfos [i ] = data
170- }
171-
172- l = int32 (len (aggInfos ))
173- w .Write (types .EncodeInt32 (& l ))
174- for i := 0 ; i < int (l ); i ++ {
175- size := int32 (len (aggInfos [i ]))
176- w .Write (types .EncodeInt32 (& size ))
177- w .Write (aggInfos [i ])
178- }
148+ // ExtraBuf1 and ExtraBuf2
149+ types .WriteSizeBytes (bat .ExtraBuf1 , w )
150+ types .WriteSizeBytes (bat .ExtraBuf2 , w )
179151
180152 w .Write (types .EncodeInt32 (& bat .Recursive ))
181153 w .Write (types .EncodeInt32 (& bat .ShuffleIDX ))
@@ -247,33 +219,75 @@ func (bat *Batch) UnmarshalBinaryWithAnyMp(data []byte, mp *mpool.MPool) (err er
247219 bat .ExtraBuf2 = append (bat .ExtraBuf2 , data [:l ]... )
248220 data = data [l :]
249221
250- l = types .DecodeInt32 (data [:4 ])
251- aggs := make ([][]byte , l )
252-
253- data = data [4 :]
254- for i := 0 ; i < int (l ); i ++ {
255- size := types .DecodeInt32 (data [:4 ])
256- data = data [4 :]
257- aggs [i ] = data [:size ]
258- data = data [size :]
259- }
260-
261222 bat .Recursive = types .DecodeInt32 (data [:4 ])
262223 data = data [4 :]
263224 bat .ShuffleIDX = types .DecodeInt32 (data [:4 ])
225+ return nil
226+ }
264227
265- if len (aggs ) > 0 {
266- bat .Aggs = make ([]aggexec.AggFuncExec , len (aggs ))
267- var aggMemoryManager aggexec.AggMemoryManager = nil
268- if mp != nil {
269- aggMemoryManager = aggexec .NewSimpleAggMemoryManager (mp )
228+ func (bat * Batch ) UnmarshalFromReader (r io.Reader , mp * mpool.MPool ) (err error ) {
229+ i64 , err := types .ReadInt64 (r )
230+ if err != nil {
231+ return err
232+ }
233+ bat .rowCount = int (i64 )
234+
235+ l , err := types .ReadInt32AsInt (r )
236+ if l != len (bat .Vecs ) {
237+ if len (bat .Vecs ) > 0 {
238+ bat .Clean (mp )
270239 }
271- for i , info := range aggs {
272- if bat .Aggs [i ], err = aggexec .UnmarshalAggFuncExec (aggMemoryManager , info ); err != nil {
273- return err
240+ bat .Vecs = make ([]* vector.Vector , l )
241+ for i := range bat .Vecs {
242+ if bat .offHeap {
243+ bat .Vecs [i ] = vector .NewOffHeapVec ()
244+ } else {
245+ bat .Vecs [i ] = vector .NewVecFromReuse ()
274246 }
275247 }
276248 }
249+ vecs := bat .Vecs
250+
251+ for i := 0 ; i < l ; i ++ {
252+ _ , bs , err := types .ReadSizeBytes (r , nil , false )
253+ if err != nil {
254+ return err
255+ }
256+ if err := vecs [i ].UnmarshalWithReader (bytes .NewReader (bs ), nil ); err != nil {
257+ return err
258+ }
259+ }
260+
261+ l , err = types .ReadInt32AsInt (r )
262+ if err != nil {
263+ return err
264+ }
265+ if l != len (bat .Attrs ) {
266+ bat .Attrs = make ([]string , l )
267+ }
268+
269+ for i := 0 ; i < int (l ); i ++ {
270+ _ , bs , err := types .ReadSizeBytes (r , nil , false )
271+ if err != nil {
272+ return err
273+ }
274+ bat .Attrs [i ] = string (bs )
275+ }
276+
277+ // ExtraBuf1
278+ if _ , bat .ExtraBuf1 , err = types .ReadSizeBytes (r , nil , false ); err != nil {
279+ return err
280+ }
281+ if _ , bat .ExtraBuf2 , err = types .ReadSizeBytes (r , nil , false ); err != nil {
282+ return err
283+ }
284+
285+ if bat .Recursive , err = types .ReadInt32 (r ); err != nil {
286+ return err
287+ }
288+ if bat .ShuffleIDX , err = types .ReadInt32 (r ); err != nil {
289+ return err
290+ }
277291 return nil
278292}
279293
@@ -437,14 +451,11 @@ func (bat *Batch) Clean(m *mpool.MPool) {
437451 vec .Free (m )
438452 }
439453 }
440- for _ , agg := range bat .Aggs {
441- if agg != nil {
442- agg .Free ()
443- }
444- }
445- bat .Aggs = nil
454+
446455 bat .Vecs = nil
447456 bat .Attrs = nil
457+ bat .ExtraBuf1 = nil
458+ bat .ExtraBuf2 = nil
448459 bat .SetRowCount (0 )
449460}
450461
@@ -639,7 +650,7 @@ func (bat *Batch) ReplaceVector(oldVec *vector.Vector, newVec *vector.Vector, st
639650}
640651
641652func (bat * Batch ) IsEmpty () bool {
642- return bat .rowCount == 0 && len ( bat . Aggs ) == 0
653+ return bat .rowCount == 0
643654}
644655
645656func (bat * Batch ) IsDone () bool {
0 commit comments