| 85 | } |
| 86 | |
| 87 | std::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 | |
| 109 | static DataTypePtr create(const ASTPtr & arguments) |
| 110 | { |
nothing calls this directly
no test coverage detected