As discussed with @kitaisreal 
const String & name_in_storage_, const String & subcolumn_name_,
    const DataTypePtr & type_in_storage_, const DataTypePtr & subcolumn_type_)
    : name(name_in_storage_ + (subcolumn_name_.empty() ? "" : "." + subcolumn_name_))
    , type(subcolumn_type_)
    , type_in_storage(type_in_storage_)
    , subcolumn_delimiter_position(subcolumn_name_.empty() ? std::nullopt : std::make_optional(name_in_storage_.size()))
{
}
String NameAndTypePair::getNameInStorage() const
{
    if (!subcolumn_delimiter_position)
        return name;
    return name.substr(0, *subcolumn_delimiter_position);
}
String NameAndTypePair::getSubcolumnName() const