ClickHouse/dbms/src/Storages/ConstraintsDescription.h

36 lines
1.0 KiB
C++
Raw Normal View History

#pragma once
#include <Parsers/ASTConstraintDeclaration.h>
2019-05-19 05:27:00 +00:00
#include <Interpreters/ExpressionAnalyzer.h>
namespace DB
{
using ConstraintsASTs = std::vector<std::shared_ptr<ASTConstraintDeclaration>>;
2019-05-19 05:27:00 +00:00
using ConstraintsExpressions = std::vector<ExpressionActionsPtr>;
struct ConstraintsDescription
{
ConstraintsASTs constraints;
ConstraintsDescription() = default;
bool empty() const { return constraints.empty(); }
String toString() const;
static ConstraintsDescription parse(const String & str);
2019-05-19 05:27:00 +00:00
ConstraintsExpressions getExpressions(const Context & context, const NamesAndTypesList & source_columns_) const {
ConstraintsExpressions res;
res.reserve(constraints.size());
for (const auto & constraint : constraints) {
ASTPtr expr = constraint->expr->clone();
auto syntax_result = SyntaxAnalyzer(context).analyze(expr, source_columns_);
res.push_back(ExpressionAnalyzer(constraint->expr->clone(), syntax_result, context).getActions(false));
}
return res;
}
};
}