diff options
author | vitalyisaev <vitalyisaev@ydb.tech> | 2023-11-14 09:58:56 +0300 |
---|---|---|
committer | vitalyisaev <vitalyisaev@ydb.tech> | 2023-11-14 10:20:20 +0300 |
commit | c2b2dfd9827a400a8495e172a56343462e3ceb82 (patch) | |
tree | cd4e4f597d01bede4c82dffeb2d780d0a9046bd0 /contrib/clickhouse/src/Storages/ColumnDefault.cpp | |
parent | d4ae8f119e67808cb0cf776ba6e0cf95296f2df7 (diff) | |
download | ydb-c2b2dfd9827a400a8495e172a56343462e3ceb82.tar.gz |
YQ Connector: move tests from yql to ydb (OSS)
Перенос папки с тестами на Коннектор из папки yql в папку ydb (синхронизируется с github).
Diffstat (limited to 'contrib/clickhouse/src/Storages/ColumnDefault.cpp')
-rw-r--r-- | contrib/clickhouse/src/Storages/ColumnDefault.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/contrib/clickhouse/src/Storages/ColumnDefault.cpp b/contrib/clickhouse/src/Storages/ColumnDefault.cpp new file mode 100644 index 0000000000..dcb59f7bd6 --- /dev/null +++ b/contrib/clickhouse/src/Storages/ColumnDefault.cpp @@ -0,0 +1,66 @@ +#include <Storages/ColumnDefault.h> +#include <Parsers/queryToString.h> + +namespace +{ + +struct AliasNames +{ + static constexpr const char * DEFAULT = "DEFAULT"; + static constexpr const char * MATERIALIZED = "MATERIALIZED"; + static constexpr const char * ALIAS = "ALIAS"; + static constexpr const char * EPHEMERAL = "EPHEMERAL"; +}; + +} + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int LOGICAL_ERROR; +} + + +ColumnDefaultKind columnDefaultKindFromString(const std::string & str) +{ + static const std::unordered_map<std::string, ColumnDefaultKind> map{ + { AliasNames::DEFAULT, ColumnDefaultKind::Default }, + { AliasNames::MATERIALIZED, ColumnDefaultKind::Materialized }, + { AliasNames::ALIAS, ColumnDefaultKind::Alias }, + { AliasNames::EPHEMERAL, ColumnDefaultKind::Ephemeral } + }; + + const auto it = map.find(str); + if (it != std::end(map)) + return it->second; + + throw Exception(ErrorCodes::LOGICAL_ERROR, "Unknown column default specifier: {}", str); +} + + +std::string toString(const ColumnDefaultKind kind) +{ + static const std::unordered_map<ColumnDefaultKind, std::string> map{ + { ColumnDefaultKind::Default, AliasNames::DEFAULT }, + { ColumnDefaultKind::Materialized, AliasNames::MATERIALIZED }, + { ColumnDefaultKind::Alias, AliasNames::ALIAS }, + { ColumnDefaultKind::Ephemeral, AliasNames::EPHEMERAL } + }; + + const auto it = map.find(kind); + if (it != std::end(map)) + return it->second; + + throw Exception(ErrorCodes::LOGICAL_ERROR, "Invalid ColumnDefaultKind"); +} + + +bool operator==(const ColumnDefault & lhs, const ColumnDefault & rhs) +{ + auto expression_str = [](const ASTPtr & expr) { return expr ? queryToString(expr) : String(); }; + return lhs.kind == rhs.kind && expression_str(lhs.expression) == expression_str(rhs.expression); +} + +} |