aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/clickhouse/src/Storages/ColumnDefault.cpp
diff options
context:
space:
mode:
authorvitalyisaev <vitalyisaev@ydb.tech>2023-11-14 09:58:56 +0300
committervitalyisaev <vitalyisaev@ydb.tech>2023-11-14 10:20:20 +0300
commitc2b2dfd9827a400a8495e172a56343462e3ceb82 (patch)
treecd4e4f597d01bede4c82dffeb2d780d0a9046bd0 /contrib/clickhouse/src/Storages/ColumnDefault.cpp
parentd4ae8f119e67808cb0cf776ba6e0cf95296f2df7 (diff)
downloadydb-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.cpp66
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);
+}
+
+}