1#include <Storages/ColumnDefault.h>
2#include <Parsers/queryToString.h>
3
4namespace
5{
6
7struct AliasNames
8{
9 static constexpr const char * DEFAULT = "DEFAULT";
10 static constexpr const char * MATERIALIZED = "MATERIALIZED";
11 static constexpr const char * ALIAS = "ALIAS";
12};
13
14}
15
16namespace DB
17{
18
19namespace ErrorCodes
20{
21 extern const int LOGICAL_ERROR;
22}
23
24
25ColumnDefaultKind columnDefaultKindFromString(const std::string & str)
26{
27 static const std::unordered_map<std::string, ColumnDefaultKind> map{
28 { AliasNames::DEFAULT, ColumnDefaultKind::Default },
29 { AliasNames::MATERIALIZED, ColumnDefaultKind::Materialized },
30 { AliasNames::ALIAS, ColumnDefaultKind::Alias }
31 };
32
33 const auto it = map.find(str);
34 if (it != std::end(map))
35 return it->second;
36
37 throw Exception{"Unknown column default specifier: " + str, ErrorCodes::LOGICAL_ERROR};
38}
39
40
41std::string toString(const ColumnDefaultKind kind)
42{
43 static const std::unordered_map<ColumnDefaultKind, std::string> map{
44 { ColumnDefaultKind::Default, AliasNames::DEFAULT },
45 { ColumnDefaultKind::Materialized, AliasNames::MATERIALIZED },
46 { ColumnDefaultKind::Alias, AliasNames::ALIAS }
47 };
48
49 const auto it = map.find(kind);
50 if (it != std::end(map))
51 return it->second;
52
53 throw Exception{"Invalid ColumnDefaultKind", ErrorCodes::LOGICAL_ERROR};
54}
55
56
57bool operator==(const ColumnDefault & lhs, const ColumnDefault & rhs)
58{
59 auto expression_str = [](const ASTPtr & expr) { return expr ? queryToString(expr) : String(); };
60 return lhs.kind == rhs.kind && expression_str(lhs.expression) == expression_str(rhs.expression);
61}
62
63}
64