https://clickhouse-test-reports.s3.yandex.net/21020/2ced21c837006053542b9f04c338faebf504f413/fuzzer_asan/server.log
struct ExtraBlock;
using ExtraBlockPtr = std::shared_ptr<ExtraBlock>;
class IJoin
{
public:
    virtual ~IJoin() = default;
    
    
    virtual bool addJoinedBlock(const Block & block, bool check_limits = true) = 0;
    
    
    virtual void joinBlock(Block & block, std::shared_ptr<ExtraBlock> & not_processed) = 0;
    virtual bool hasTotals() const = 0;
    virtual void setTotals(const Block & block) = 0;
    virtual void joinTotals(Block & block) const = 0;
    virtual size_t getTotalRowCount() const = 0;
    virtual size_t getTotalByteCount() const = 0;
    virtual bool alwaysReturnsEmptySet() const { return false; }
    virtual BlockInputStreamPtr createStreamWithNonJoinedRows(const Block &, UInt64) const { return {}; }
};
using JoinPtr = std::shared_ptr<IJoin>;
}