@@ -223,7 +223,8 @@ void ColumnArray::insertData(const char * pos, size_t length)
223223}
224224
225225
226- StringRef ColumnArray::serializeValueIntoArena (size_t n, Arena & arena, char const *& begin) const
226+ StringRef
227+ ColumnArray::serializeValueIntoArena (size_t n, Arena & arena, char const *& begin, const IColumn::SerializationSettings * settings) const
227228{
228229 size_t array_size = sizeAt (n);
229230 size_t offset = offsetAt (n);
@@ -235,49 +236,27 @@ StringRef ColumnArray::serializeValueIntoArena(size_t n, Arena & arena, char con
235236
236237 for (size_t i = 0 ; i < array_size; ++i)
237238 {
238- auto value_ref = getData ().serializeValueIntoArena (offset + i, arena, begin);
239+ auto value_ref = getData ().serializeValueIntoArena (offset + i, arena, begin, settings );
239240 res.data = value_ref.data - res.size ;
240241 res.size += value_ref.size ;
241242 }
242243
243244 return res;
244245}
245246
246-
247- StringRef ColumnArray::serializeAggregationStateValueIntoArena (size_t n, Arena & arena, char const *& begin) const
248- {
249- size_t array_size = sizeAt (n);
250- size_t offset = offsetAt (n);
251-
252- char * pos = arena.allocContinue (sizeof (array_size), begin);
253- memcpy (pos, &array_size, sizeof (array_size));
254-
255- StringRef res (pos, sizeof (array_size));
256-
257- for (size_t i = 0 ; i < array_size; ++i)
258- {
259- auto value_ref = getData ().serializeAggregationStateValueIntoArena (offset + i, arena, begin);
260- res.data = value_ref.data - res.size ;
261- res.size += value_ref.size ;
262- }
263-
264- return res;
265- }
266-
267-
268- char * ColumnArray::serializeValueIntoMemory (size_t n, char * memory) const
247+ char * ColumnArray::serializeValueIntoMemory (size_t n, char * memory, const IColumn::SerializationSettings * settings) const
269248{
270249 size_t array_size = sizeAt (n);
271250 size_t offset = offsetAt (n);
272251
273252 memcpy (memory, &array_size, sizeof (array_size));
274253 memory += sizeof (array_size);
275254 for (size_t i = 0 ; i < array_size; ++i)
276- memory = getData ().serializeValueIntoMemory (offset + i, memory);
255+ memory = getData ().serializeValueIntoMemory (offset + i, memory, settings );
277256 return memory;
278257}
279258
280- std::optional<size_t > ColumnArray::getSerializedValueSize (size_t n) const
259+ std::optional<size_t > ColumnArray::getSerializedValueSize (size_t n, const IColumn::SerializationSettings * settings ) const
281260{
282261 const auto & offsets_data = getOffsets ();
283262
@@ -287,7 +266,7 @@ std::optional<size_t> ColumnArray::getSerializedValueSize(size_t n) const
287266 size_t res = sizeof (offsets_data[0 ]);
288267 for (; pos < end; ++pos)
289268 {
290- auto element_size = getData ().getSerializedValueSize (pos);
269+ auto element_size = getData ().getSerializedValueSize (pos, settings );
291270 if (!element_size)
292271 return std::nullopt ;
293272 res += *element_size;
@@ -297,24 +276,13 @@ std::optional<size_t> ColumnArray::getSerializedValueSize(size_t n) const
297276}
298277
299278
300- void ColumnArray::deserializeAndInsertFromArena (ReadBuffer & in)
301- {
302- size_t array_size;
303- readBinaryLittleEndian<size_t >(array_size, in);
304-
305- for (size_t i = 0 ; i < array_size; ++i)
306- getData ().deserializeAndInsertFromArena (in);
307-
308- getOffsets ().push_back (getOffsets ().back () + array_size);
309- }
310-
311- void ColumnArray::deserializeAndInsertAggregationStateValueFromArena (ReadBuffer & in)
279+ void ColumnArray::deserializeAndInsertFromArena (ReadBuffer & in, const IColumn::SerializationSettings * settings)
312280{
313281 size_t array_size;
314282 readBinaryLittleEndian<size_t >(array_size, in);
315283
316284 for (size_t i = 0 ; i < array_size; ++i)
317- getData ().deserializeAndInsertAggregationStateValueFromArena (in);
285+ getData ().deserializeAndInsertFromArena (in, settings );
318286
319287 getOffsets ().push_back (getOffsets ().back () + array_size);
320288}
0 commit comments