ClickHouse/dbms/src/Processors/Transforms/DistinctTransform.h

45 lines
970 B
C++
Raw Normal View History

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-03-25 16:58:59 +00:00
class DistinctTransform : ISimpleTransform
2019-03-25 16:37:27 +00:00
{
2019-03-25 16:58:59 +00:00
public:
DistinctTransform(
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
}