MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / executeGeneric

Function executeGeneric

src/Functions/array/emptyArrayToSingle.cpp:261–305  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

259
260 template <bool nullable>
261 void executeGeneric(
262 const IColumn & src_data, const ColumnArray::Offsets & src_offsets,
263 IColumn & res_data, ColumnArray::Offsets & res_offsets,
264 const NullMap * src_null_map,
265 NullMap * res_null_map)
266 {
267 size_t size = src_offsets.size();
268 res_offsets.resize(size);
269 res_data.reserve(src_data.size());
270
271 if (nullable)
272 res_null_map->reserve(src_null_map->size());
273
274 ColumnArray::Offset src_prev_offset = 0;
275 ColumnArray::Offset res_prev_offset = 0;
276
277 for (size_t i = 0; i < size; ++i)
278 {
279 if (src_offsets[i] != src_prev_offset)
280 {
281 size_t size_to_write = src_offsets[i] - src_prev_offset;
282 res_data.insertRangeFrom(src_data, src_prev_offset, size_to_write);
283
284 if (nullable)
285 {
286 res_null_map->resize(res_prev_offset + size_to_write);
287 memcpy(&(*res_null_map)[res_prev_offset], &(*src_null_map)[src_prev_offset], size_to_write);
288 }
289
290 res_prev_offset += size_to_write;
291 res_offsets[i] = res_prev_offset;
292 }
293 else
294 {
295 res_data.insertDefault();
296 ++res_prev_offset;
297 res_offsets[i] = res_prev_offset;
298
299 if (nullable)
300 res_null_map->push_back(ColumnNullable::IS_NULL_MASK);
301 }
302
303 src_prev_offset = src_offsets[i];
304 }
305 }
306
307
308 template <bool nullable>

Callers 6

executeOnNonNullableMethod · 0.70
executeImplMethod · 0.70
executeMethod · 0.70
executeImplMethod · 0.70
executeMethod · 0.70
executeMethod · 0.70

Calls 7

memcpyFunction · 0.85
sizeMethod · 0.45
resizeMethod · 0.45
reserveMethod · 0.45
insertRangeFromMethod · 0.45
insertDefaultMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected