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

Method getDynamicSubcolumnData

src/DataTypes/DataTypeNullable.cpp:112–132  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

110
111
112std::unique_ptr<ISerialization::SubstreamData> DataTypeNullable::getDynamicSubcolumnData(std::string_view subcolumn_name, const SubstreamData & data, size_t initial_array_level, bool throw_if_null) const
113{
114 auto nested_type = assert_cast<const DataTypeNullable &>(*data.type).nested_data_type;
115 const auto & nullable_serialization = assert_cast<const SerializationNullable &>(*removeNamedSerialization(data.serialization));
116 ISerialization::SubstreamData nested_data(nullable_serialization.getNested());
117 nested_data.type = nested_type;
118 nested_data.column = data.column ? assert_cast<const ColumnNullable &>(*data.column).getNestedColumnPtr() : nullptr;
119
120 auto nested_subcolumn_data = DB::IDataType::getSubcolumnData(subcolumn_name, nested_data, initial_array_level, throw_if_null);
121 if (!nested_subcolumn_data)
122 return nullptr;
123
124 auto creator = NullableSubcolumnCreator(data.column ? assert_cast<const ColumnNullable &>(*data.column).getNullMapColumnPtr() : nullptr);
125 auto res = std::make_unique<ISerialization::SubstreamData>();
126 res->serialization = creator.create(nested_subcolumn_data->serialization, nested_subcolumn_data->type);
127 res->type = creator.create(nested_subcolumn_data->type);
128 if (data.column)
129 res->column = creator.create(nested_subcolumn_data->column);
130
131 return res;
132}
133
134static DataTypePtr create(const ASTPtr & arguments)
135{

Callers

nothing calls this directly

Calls 5

removeNamedSerializationFunction · 0.85
getNullMapColumnPtrMethod · 0.80
getNestedMethod · 0.45
createMethod · 0.45

Tested by

no test coverage detected