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

Function recursiveConvertColumn

src/DataTypes/recursiveTypeConversions.h:58–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

56
57template <typename FromColumn>
58ColumnPtr recursiveConvertColumn(const ColumnPtr & column, Fn<ColumnPtr(const FromColumn &)> auto && func)
59{
60 if (!column)
61 return column;
62
63 if (const auto * from_column = typeid_cast<const FromColumn *>(column.get()))
64 return func(*from_column);
65
66 if (const auto * column_array = typeid_cast<const ColumnArray *>(column.get()))
67 {
68 const auto & data = column_array->getDataPtr();
69 auto converted = recursiveConvertColumn<FromColumn>(data, func);
70 if (data.get() == converted.get())
71 return column;
72
73 return ColumnArray::create(converted, column_array->getOffsetsPtr());
74 }
75
76 if (const auto * column_const = typeid_cast<const ColumnConst *>(column.get()))
77 {
78 const auto & nested = column_const->getDataColumnPtr();
79 auto converted = recursiveConvertColumn<FromColumn>(nested, func);
80 if (nested.get() == converted.get())
81 return column;
82
83 return ColumnConst::create(converted, column_const->size());
84 }
85
86 if (const auto * column_map = typeid_cast<const ColumnMap *>(column.get()))
87 {
88 const auto & nested = column_map->getNestedColumnPtr();
89 auto converted = recursiveConvertColumn<FromColumn>(nested, func);
90 if (nested.get() == converted.get())
91 return column;
92
93 return ColumnMap::create(converted);
94 }
95
96 if (const auto * column_nullable = typeid_cast<const ColumnNullable *>(column.get()))
97 {
98 const auto & nested = column_nullable->getNestedColumnPtr();
99 auto converted = recursiveConvertColumn<FromColumn>(nested, func);
100 if (nested.get() == converted.get())
101 return column;
102
103 return ColumnNullable::create(converted, column_nullable->getNullMapColumnPtr());
104 }
105
106 if (const auto * column_tuple = typeid_cast<const ColumnTuple *>(column.get()))
107 {
108 auto columns = column_tuple->getColumns();
109 for (auto & element : columns)
110 element = recursiveConvertColumn<FromColumn>(element, func);
111 return ColumnTuple::create(columns);
112 }
113
114 return column;
115}

Callers

nothing calls this directly

Calls 6

funcFunction · 0.85
getNullMapColumnPtrMethod · 0.80
createFunction · 0.70
getMethod · 0.45
sizeMethod · 0.45
getColumnsMethod · 0.45

Tested by

no test coverage detected