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 | |
8 | namespace DB |
9 | { |
10 | |
11 | bool IndicesDescription::empty() const |
12 | { |
13 | return indices.empty(); |
14 | } |
15 | |
16 | bool 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 | |
26 | String 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 | |
38 | IndicesDescription 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 |