https://clickhouse-test-reports.s3.yandex.net/20599/0a62f95bbe380abe8d8846ef9690b8a18c6a762b/fuzzer_debug/report.html#fail1
{
    WriteBufferFromOwnString ss;
    for (size_t i = 0; i < steps.size(); ++i)
    {
        ss << "step " << i << "\n";
        ss << "required output:\n";
        for (const auto & it : steps[i]->required_output)
            ss << it.first << "\n";
        ss << "\n" << steps[i]->dump() << "\n";
    }
    return ss.str();
}
ExpressionActionsChain::ArrayJoinStep::ArrayJoinStep(ArrayJoinActionPtr array_join_, ColumnsWithTypeAndName required_columns_)
    : Step({})
    , array_join(std::move(array_join_))
    , result_columns(std::move(required_columns_))
{
    for (auto & column : result_columns)
    {
        required_columns.emplace_back(NameAndTypePair(column.name, column.type));
        if (array_join->columns.count(column.name) > 0)
        {
            const auto * array = typeid_cast<const DataTypeArray *>(column.type.get());
            column.type = array->getNestedType();
            
            column.column = nullptr;
        }
    }
}
void ExpressionActionsChain::ArrayJoinStep::finalize(const NameSet & required_output_)