```
SELECT categoricalInformationValue(x.1, x.2) FROM (SELECT arrayJoin([(0, 0), (NULL, 2), (1, 0), (1, 1)]) AS x)
```
std::make_shared<SerializationNumber<UInt64>>(),
                "size" + std::to_string(getArrayLevel(settings.path)), false);
    auto offsets_column = offsets && !settings.position_independent_encoding
        ? arrayOffsetsToSizes(*offsets)
        : offsets;
    settings.path.push_back(Substream::ArraySizes);
    settings.path.back().data = SubstreamData(offsets_serialization)
        .withType(type_array ? std::make_shared<DataTypeUInt64>() : nullptr)
        .withColumn(std::move(offsets_column))
        .withSerializationInfo(data.serialization_info);
    callback(settings.path);
    settings.path.back() = Substream::ArrayElements;
    settings.path.back().data = data;
    settings.path.back().creator = std::make_shared<SubcolumnCreator>(offsets);
    auto next_data = SubstreamData(nested)
        .withType(type_array ? type_array->getNestedType() : nullptr)
        .withColumn(column_array ? column_array->getDataPtr() : nullptr)
        .withSerializationInfo(data.serialization_info);
    nested->enumerateStreams(settings, callback, next_data);
    settings.path.pop_back();
}
void SerializationArray::serializeBinaryBulkStatePrefix(
    SerializeBinaryBulkSettings & settings,
    SerializeBinaryBulkStatePtr & state) const
{
    settings.path.push_back(Substream::ArrayElements);
    nested->serializeBinaryBulkStatePrefix(settings, state);
    settings.path.pop_back();
}
void SerializationArray::serializeBinaryBulkStateSuffix(