ClickHouse/src/Interpreters/IJoin.h

58 lines
1.7 KiB
C++
Raw Normal View History

2019-09-09 19:43:37 +00:00
#pragma once
#include <memory>
2019-09-10 18:39:10 +00:00
#include <vector>
#include <Core/Names.h>
#include <Columns/IColumn.h>
2019-09-09 19:43:37 +00:00
namespace DB
{
class Block;
2020-01-15 20:33:29 +00:00
struct ExtraBlock;
using ExtraBlockPtr = std::shared_ptr<ExtraBlock>;
2019-09-09 19:43:37 +00:00
class TableJoin;
class NotJoinedBlocks;
2019-09-09 19:43:37 +00:00
class IJoin
{
public:
virtual ~IJoin() = default;
virtual const TableJoin & getTableJoin() const = 0;
2019-09-09 19:43:37 +00:00
/// Add block of data from right hand of JOIN.
/// @returns false, if some limit was exceeded and you should not insert more data.
virtual bool addJoinedBlock(const Block & block, bool check_limits = true) = 0; /// NOLINT
2019-09-09 19:43:37 +00:00
virtual void checkTypesOfKeys(const Block & block) const = 0;
2019-09-09 19:43:37 +00:00
/// Join the block with data from left hand of JOIN to the right hand data (that was previously built by calls to addJoinedBlock).
/// Could be called from different threads in parallel.
2020-01-15 20:33:29 +00:00
virtual void joinBlock(Block & block, std::shared_ptr<ExtraBlock> & not_processed) = 0;
2019-09-09 19:43:37 +00:00
/// Set/Get totals for right table
2019-09-09 19:43:37 +00:00
virtual void setTotals(const Block & block) = 0;
virtual const Block & getTotals() const = 0;
2019-09-09 19:43:37 +00:00
2019-09-10 14:51:28 +00:00
virtual size_t getTotalRowCount() const = 0;
virtual size_t getTotalByteCount() const = 0;
virtual bool alwaysReturnsEmptySet() const = 0;
2021-04-29 09:08:49 +00:00
/// StorageJoin/Dictionary is already filled. No need to call addJoinedBlock.
/// Different query plan is used for such joins.
virtual bool isFilled() const { return false; }
2021-04-28 17:32:12 +00:00
// That can run FillingRightJoinSideTransform parallelly
virtual bool supportParallelJoin() const { return false; }
2021-09-10 14:52:44 +00:00
virtual std::shared_ptr<NotJoinedBlocks>
getNonJoinedBlocks(const Block & left_sample_block, const Block & result_sample_block, UInt64 max_block_size) const = 0;
2019-09-09 19:43:37 +00:00
};
using JoinPtr = std::shared_ptr<IJoin>;
2019-09-11 18:03:21 +00:00
}