2019-05-17 04:08:03 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <Parsers/ASTConstraintDeclaration.h>
|
2019-05-19 05:27:00 +00:00
|
|
|
#include <Interpreters/ExpressionAnalyzer.h>
|
2019-05-17 04:08:03 +00:00
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
|
|
|
using ConstraintsASTs = std::vector<std::shared_ptr<ASTConstraintDeclaration>>;
|
2019-05-19 05:27:00 +00:00
|
|
|
using ConstraintsExpressions = std::vector<ExpressionActionsPtr>;
|
2019-05-17 04:08:03 +00:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
2019-05-17 04:08:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|