2019-03-25 16:58:59 +00:00
|
|
|
#pragma once
|
|
|
|
#include <Processors/ISimpleTransform.h>
|
|
|
|
#include <DataStreams/SizeLimits.h>
|
|
|
|
#include <Core/ColumnNumbers.h>
|
|
|
|
#include <Interpreters/SetVariants.h>
|
2019-03-25 16:37:27 +00:00
|
|
|
|
2019-03-25 16:58:59 +00:00
|
|
|
namespace DB
|
|
|
|
{
|
2019-03-25 16:37:27 +00:00
|
|
|
|
2019-04-05 10:52:07 +00:00
|
|
|
class DistinctTransform : public ISimpleTransform
|
2019-03-25 16:37:27 +00:00
|
|
|
{
|
2019-03-25 16:58:59 +00:00
|
|
|
public:
|
|
|
|
DistinctTransform(
|
2019-08-03 11:02:40 +00:00
|
|
|
const Block & header_,
|
|
|
|
const SizeLimits & set_size_limits_,
|
|
|
|
UInt64 limit_hint_,
|
|
|
|
const Names & columns_);
|
2019-03-25 16:37:27 +00:00
|
|
|
|
2019-03-25 16:58:59 +00:00
|
|
|
String getName() const override { return "DistinctTransform"; }
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void transform(Chunk & chunk) override;
|
2019-03-25 16:37:27 +00:00
|
|
|
|
2019-03-25 16:58:59 +00:00
|
|
|
private:
|
|
|
|
ColumnNumbers key_columns_pos;
|
|
|
|
SetVariants data;
|
|
|
|
Sizes key_sizes;
|
|
|
|
UInt64 limit_hint;
|
|
|
|
|
|
|
|
bool no_more_rows = false;
|
|
|
|
|
|
|
|
/// Restrictions on the maximum size of the output data.
|
|
|
|
SizeLimits set_size_limits;
|
|
|
|
|
|
|
|
template <typename Method>
|
|
|
|
void buildFilter(
|
|
|
|
Method & method,
|
|
|
|
const ColumnRawPtrs & key_columns,
|
|
|
|
IColumn::Filter & filter,
|
|
|
|
size_t rows,
|
|
|
|
SetVariants & variants) const;
|
|
|
|
};
|
2019-03-25 16:37:27 +00:00
|
|
|
|
2019-03-25 16:58:59 +00:00
|
|
|
}
|