ClickHouse/dbms/src/DataStreams/CheckConstraintsBlockOutputStream.h

53 lines
1.4 KiB
C++
Raw Normal View History

2019-05-19 05:27:00 +00:00
#pragma once
#include <DataStreams/IBlockOutputStream.h>
#include <Storages/ConstraintsDescription.h>
#include <DataStreams/OneBlockInputStream.h>
#include <DataStreams/ExpressionBlockInputStream.h>
namespace DB
{
namespace ErrorCodes
{
extern const int VIOLATED_CONSTRAINT;
2019-05-19 05:27:00 +00:00
}
class CheckConstraintsBlockOutputStream : public IBlockOutputStream
{
public:
CheckConstraintsBlockOutputStream(
2019-07-28 12:33:40 +00:00
const String & table_,
2019-05-19 05:27:00 +00:00
const BlockOutputStreamPtr & output_,
const Block & header_,
const ConstraintsDescription & constraints_,
const Context & context_)
2019-07-28 12:33:40 +00:00
: table(table_),
output(output_),
2019-05-19 05:27:00 +00:00
header(header_),
constraints(constraints_),
2019-07-28 12:33:40 +00:00
expressions(constraints_.getExpressions(context_, header.getNamesAndTypesList())),
rows_written(0)
2019-05-19 05:27:00 +00:00
{ }
Block getHeader() const override { return header; }
void write(const Block & block) override;
void flush() override;
void writePrefix() override;
void writeSuffix() override;
private:
2019-08-11 09:28:15 +00:00
const ColumnUInt8* executeOnBlock(Block & block, const ExpressionActionsPtr & constraint);
2019-07-28 12:33:40 +00:00
std::vector<size_t> findAllWrong(const void *data, size_t size);
String table;
2019-05-19 05:27:00 +00:00
BlockOutputStreamPtr output;
Block header;
const ConstraintsDescription constraints;
const ConstraintsExpressions expressions;
2019-07-28 12:33:40 +00:00
size_t rows_written;
2019-05-19 05:27:00 +00:00
};
}