@@ -243,6 +243,27 @@ StringRef ColumnArray::serializeValueIntoArena(size_t n, Arena & arena, char con
243243}
244244
245245
246+ StringRef ColumnArray::serializeAggregationStateValueIntoArena (size_t n, Arena & arena, char const *& begin) const
247+ {
248+ size_t array_size = sizeAt (n);
249+ size_t offset = offsetAt (n);
250+
251+ char * pos = arena.allocContinue (sizeof (array_size), begin);
252+ memcpy (pos, &array_size, sizeof (array_size));
253+
254+ StringRef res (pos, sizeof (array_size));
255+
256+ for (size_t i = 0 ; i < array_size; ++i)
257+ {
258+ auto value_ref = getData ().serializeAggregationStateValueIntoArena (offset + i, arena, begin);
259+ res.data = value_ref.data - res.size ;
260+ res.size += value_ref.size ;
261+ }
262+
263+ return res;
264+ }
265+
266+
246267char * ColumnArray::serializeValueIntoMemory (size_t n, char * memory) const
247268{
248269 size_t array_size = sizeAt (n);
@@ -287,6 +308,18 @@ const char * ColumnArray::deserializeAndInsertFromArena(const char * pos)
287308 return pos;
288309}
289310
311+ const char * ColumnArray::deserializeAndInsertAggregationStateValueFromArena (const char * pos)
312+ {
313+ size_t array_size = unalignedLoad<size_t >(pos);
314+ pos += sizeof (array_size);
315+
316+ for (size_t i = 0 ; i < array_size; ++i)
317+ pos = getData ().deserializeAndInsertAggregationStateValueFromArena (pos);
318+
319+ getOffsets ().push_back (getOffsets ().back () + array_size);
320+ return pos;
321+ }
322+
290323const char * ColumnArray::skipSerializedInArena (const char * pos) const
291324{
292325 size_t array_size = unalignedLoad<size_t >(pos);
0 commit comments