{
        if (const auto * nullable_column = typeid_cast<const ColumnNullable *>(x))
        {
            if (const auto * nested_column = typeid_cast<const ColumnVector<Type> *>(nullable_column->getNestedColumnPtr().get()))
            {
                return [&null_data = nullable_column->getNullMapData(), &column_data = nested_column->getData()](size_t i)
                { return Ternary::makeValue(column_data[i], null_data[i]); };
            }
            else
                return ValueGetterBuilderImpl<Types...>::build(x);
        }
        else if (const auto column = typeid_cast<const ColumnVector<Type> *>(x))
            return [&column_data = column->getData()](size_t i) { return Ternary::makeValue(column_data[i]); };
        else
            return ValueGetterBuilderImpl<Types...>::build(x);
    }
};
template <>
struct ValueGetterBuilderImpl<>
{
    static TernaryValueGetter build(const IColumn * x)