1#include <Storages/IndicesDescription.h>
2
3#include <Parsers/ASTIndexDeclaration.h>
4#include <Parsers/formatAST.h>
5#include <Parsers/ParserCreateQuery.h>
6#include <Parsers/parseQuery.h>
7
8namespace DB
9{
10
11bool IndicesDescription::empty() const
12{
13 return indices.empty();
14}
15
16bool IndicesDescription::has(const String & name) const
17{
18 return std::cend(indices) != std::find_if(
19 std::cbegin(indices), std::cend(indices),
20 [&name](const auto & index)
21 {
22 return index->name == name;
23 });
24}
25
26String IndicesDescription::toString() const
27{
28 if (indices.empty())
29 return {};
30
31 ASTExpressionList list;
32 for (const auto & index : indices)
33 list.children.push_back(index);
34
35 return serializeAST(list, true);
36}
37
38IndicesDescription IndicesDescription::parse(const String & str)
39{
40 if (str.empty())
41 return {};
42
43 IndicesDescription res;
44 ParserIndexDeclarationList parser;
45 ASTPtr list = parseQuery(parser, str, 0);
46
47 for (const auto & index : list->children)
48 res.indices.push_back(std::dynamic_pointer_cast<ASTIndexDeclaration>(index));
49
50 return res;
51}
52
53}
54