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

Method doGetSerialization

src/DataTypes/DataTypeMap.cpp:120–141  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

118}
119
120SerializationPtr DataTypeMap::doGetSerialization(const SerializationInfoSettings & settings) const
121{
122 SerializationPtr key_serialization;
123 SerializationPtr value_serialization;
124 if (settings.propagate_types_serialization_versions_to_nested_types)
125 {
126 key_serialization = key_type->getSerialization(settings);
127 value_serialization = value_type->getSerialization(settings);
128 }
129 else
130 {
131 key_serialization = key_type->getDefaultSerialization();
132 value_serialization = value_type->getDefaultSerialization();
133 }
134
135 /// Don't use nested->getSerialization() to avoid creating exponentially growing number of serializations for deep nested maps.
136 /// Instead, reuse already created serializations for keys and values.
137 auto key_serialization_named = std::static_pointer_cast<const SerializationNamed>(SerializationNamed::create(key_serialization, "keys", SubstreamType::TupleElement));
138 auto value_serialization_named = std::static_pointer_cast<const SerializationNamed>(SerializationNamed::create(value_serialization, "values", SubstreamType::TupleElement));
139 auto nested_serialization = SerializationArray::create(SerializationTuple::create(SerializationTuple::ElementSerializations{key_serialization_named, value_serialization_named}, true));
140 return SerializationMap::create(key_serialization, value_serialization, nested_serialization, settings.map_serialization_version);
141}
142
143bool DataTypeMap::equals(const IDataType & rhs) const
144{

Callers

nothing calls this directly

Calls 3

createFunction · 0.70
getSerializationMethod · 0.45

Tested by

no test coverage detected