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

Method getDynamicSubcolumnData

src/DataTypes/DataTypeArray.cpp:87–107  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

85}
86
87std::unique_ptr<ISerialization::SubstreamData> DataTypeArray::getDynamicSubcolumnData(std::string_view subcolumn_name, const SubstreamData & data, size_t initial_array_level, bool throw_if_null) const
88{
89 auto nested_type = assert_cast<const DataTypeArray &>(*data.type).nested;
90 const auto & array_serialization = assert_cast<const SerializationArray &>(*removeNamedSerialization(data.serialization));
91 auto nested_data = std::make_unique<ISerialization::SubstreamData>(array_serialization.getNestedSerialization());
92 nested_data->type = nested_type;
93 nested_data->column = data.column ? assert_cast<const ColumnArray &>(*data.column).getDataPtr() : nullptr;
94
95 auto nested_subcolumn_data = getSubcolumnData(subcolumn_name, *nested_data, initial_array_level + 1, throw_if_null);
96 if (!nested_subcolumn_data)
97 return nullptr;
98
99 auto creator = SerializationArray::SubcolumnCreator(data.column ? assert_cast<const ColumnArray &>(*data.column).getOffsetsPtr() : nullptr);
100 auto res = std::make_unique<ISerialization::SubstreamData>();
101 res->serialization = creator.create(nested_subcolumn_data->serialization, nested_subcolumn_data->type);
102 res->type = creator.create(nested_subcolumn_data->type);
103 if (data.column)
104 res->column = creator.create(nested_subcolumn_data->column);
105
106 return res;
107}
108
109static DataTypePtr create(const ASTPtr & arguments)
110{

Callers

nothing calls this directly

Calls 4

removeNamedSerializationFunction · 0.85
SubcolumnCreatorClass · 0.50
createMethod · 0.45

Tested by

no test coverage detected