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

Function flattenTupleColumnsRecursive

src/DataTypes/NestedUtils.cpp:383–410  ·  view source on GitHub ↗

Flatten tuple columns: input a vector of columns, return a new vector with all tuples expanded All tuples are flattened recursively

Source from the content-addressed store, hash-verified

381/// Flatten tuple columns: input a vector of columns, return a new vector with all tuples expanded
382/// All tuples are flattened recursively
383Columns flattenTupleColumnsRecursive(const Block & header, const Columns & columns)
384{
385 if (header.columns() != columns.size())
386 {
387 throw Exception(
388 ErrorCodes::LOGICAL_ERROR,
389 "Header columns count ({}) does not match columns count ({}) in flattenTupleColumns",
390 header.columns(),
391 columns.size());
392 }
393
394 Columns result;
395 result.reserve(columns.size()); /// Lower bound: every column flattens to at least one leaf.
396
397 for (size_t i = 0; i < columns.size(); ++i)
398 {
399 const auto & header_col = header.getByPosition(i);
400 flattenTupleRecursiveImpl(
401 columns[i], header_col.type,
402 [&result](const ColumnPtr & col, const DataTypePtr &, const String &, const Strings &)
403 {
404 result.push_back(col);
405 },
406 {}, {});
407 }
408
409 return result;
410}
411
412static ColumnPtr reconstructTupleColumnImpl(const DataTypePtr & data_type, const Columns & flattened_columns, size_t & flattened_idx)
413{

Callers 2

preprocessChunkFunction · 0.85
preprocessChunkFunction · 0.85

Calls 6

columnsMethod · 0.80
ExceptionClass · 0.50
sizeMethod · 0.45
reserveMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected