```
SELECT categoricalInformationValue(x.1, x.2) FROM (SELECT arrayJoin([(0, 0), (NULL, 2), (1, 0), (1, 1)]) AS x)
```
{
    size_t size;
    readVarUInt(size, istr);
    field = Array();
    Array & arr = field.get<Array &>();
    arr.reserve(size);
    for (size_t i = 0; i < size; ++i)
        nested->deserializeBinary(arr.emplace_back(), istr);
}
void SerializationArray::serializeBinary(const IColumn & column, size_t row_num, WriteBuffer & ostr) const
{
    const ColumnArray & column_array = assert_cast<const ColumnArray &>(column);
    const ColumnArray::Offsets & offsets = column_array.getOffsets();
    size_t offset = offsets[row_num - 1];
    size_t next_offset = offsets[row_num];
    size_t size = next_offset - offset;
    writeVarUInt(size, ostr);
    const IColumn & nested_column = column_array.getData();
    for (size_t i = offset; i < next_offset; ++i)
        nested->serializeBinary(nested_column, i, ostr);
}
void SerializationArray::deserializeBinary(IColumn & column, ReadBuffer & istr) const