MCPcopy Create free account
hub / github.com/ByConity/ByConity / recursiveConvertType

Function recursiveConvertType

src/DataTypes/recursiveTypeConversions.h:22–55  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20
21template <typename FromType>
22DataTypePtr recursiveConvertType(const DataTypePtr & type, Fn<DataTypePtr(const FromType &)> auto && func)
23{
24 if (!type)
25 return type;
26
27 if (const auto * from_type = typeid_cast<const FromType *>(type.get()))
28 return func(*from_type);
29
30 if (const auto * array_type = typeid_cast<const DataTypeArray *>(type.get()))
31 return std::make_shared<DataTypeArray>(recursiveConvertType<FromType>(array_type->getNestedType(), func));
32
33 if (const auto * map_type = typeid_cast<const DataTypeMap *>(type.get()))
34 return std::make_shared<DataTypeMap>(recursiveConvertType<FromType>(map_type->getKeyType(), func), recursiveConvertType<FromType>(map_type->getValueType(), func));
35
36 if (const auto * low_cardinality_type = typeid_cast<const DataTypeLowCardinality *>(type.get()))
37 return std::make_shared<DataTypeLowCardinality>(recursiveConvertType<FromType>(low_cardinality_type->getDictionaryType(), func));
38
39 if (const auto * nullable_type = typeid_cast<const DataTypeNullable *>(type.get()))
40 return std::make_shared<DataTypeNullable>(recursiveConvertType<FromType>(nullable_type->getNestedType(), func));
41
42 if (const auto * tuple_type = typeid_cast<const DataTypeTuple *>(type.get()))
43 {
44 DataTypes elements = tuple_type->getElements();
45 for (auto & element : elements)
46 element = recursiveConvertType<FromType>(element, func);
47
48 if (tuple_type->haveExplicitNames())
49 return std::make_shared<DataTypeTuple>(elements, tuple_type->getElementNames());
50 else
51 return std::make_shared<DataTypeTuple>(elements);
52 }
53
54 return type;
55}
56
57template <typename FromColumn>
58ColumnPtr recursiveConvertColumn(const ColumnPtr & column, Fn<ColumnPtr(const FromColumn &)> auto && func)

Callers

nothing calls this directly

Calls 6

funcFunction · 0.85
getNestedTypeMethod · 0.80
haveExplicitNamesMethod · 0.80
getMethod · 0.45
getKeyTypeMethod · 0.45
getElementsMethod · 0.45

Tested by

no test coverage detected