```
SELECT categoricalInformationValue(x.1, x.2) FROM (SELECT arrayJoin([(0, 0), (NULL, 2), (1, 0), (1, 1)]) AS x)
```
{
    return std::make_shared<DataTypeArray>(prev);
}
SerializationPtr SerializationArray::SubcolumnCreator::create(const SerializationPtr & prev) const
{
    return std::make_shared<SerializationArray>(prev);
}
ColumnPtr SerializationArray::SubcolumnCreator::create(const ColumnPtr & prev) const
{
    return ColumnArray::create(prev, offsets);
}
void SerializationArray::enumerateStreams(
    EnumerateStreamsSettings & settings,
    const StreamCallback & callback,
    const SubstreamData & data) const
{
    const auto * type_array = data.type ? &assert_cast<const DataTypeArray &>(*data.type) : nullptr;
    const auto * column_array = data.column ? &assert_cast<const ColumnArray &>(*data.column) : nullptr;
    auto offsets = column_array ? column_array->getOffsetsPtr() : nullptr;
    auto offsets_serialization =
        std::make_shared<SerializationNamed>(