| 110 | |
| 111 | |
| 112 | std::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 | |
| 134 | static DataTypePtr create(const ASTPtr & arguments) |
| 135 | { |
nothing calls this directly
no test coverage detected