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

Function flattenTupleTypeImpl

src/DataTypes/flattenTuple.cpp:15–47  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13{
14
15void flattenTupleTypeImpl(const DataTypePtr & type, const String & current_path, std::vector<String> & flattened_paths, DataTypes & flattened_types)
16{
17 if (const auto * type_tuple = typeid_cast<const DataTypeTuple *>(removeNullable(type).get()))
18 {
19 const auto & tuple_names = type_tuple->getElementNames();
20 const auto & tuple_types = type_tuple->getElements();
21
22 for (size_t i = 0; i < tuple_names.size(); ++i)
23 {
24 String path = current_path.empty() ? tuple_names[i] : current_path + "." + tuple_names[i];
25 flattenTupleTypeImpl(tuple_types[i], path, flattened_paths, flattened_types);
26 }
27 }
28 else if (const auto * type_array = typeid_cast<const DataTypeArray *>(type.get()))
29 {
30 std::vector<String> flattened_element_paths;
31 DataTypes flattened_element_types;
32
33 flattenTupleTypeImpl(type_array->getNestedType(), current_path, flattened_element_paths, flattened_element_types);
34 chassert(flattened_element_paths.size() == flattened_element_types.size());
35
36 for (size_t i = 0; i < flattened_element_paths.size(); ++i)
37 {
38 flattened_paths.push_back(flattened_element_paths[i]);
39 flattened_types.push_back(std::make_shared<DataTypeArray>(flattened_element_types[i]));
40 }
41 }
42 else
43 {
44 flattened_paths.push_back(current_path);
45 flattened_types.push_back(type);
46 }
47}
48
49void flattenTupleColumnImpl(const ColumnPtr & column, Columns & flattened_columns, Columns & offsets_columns)
50{

Callers 1

flattenTupleFunction · 0.85

Calls 7

getNestedTypeMethod · 0.80
removeNullableFunction · 0.70
getMethod · 0.45
getElementsMethod · 0.45
sizeMethod · 0.45
emptyMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected