From 562cfe9f9f94979cbf80af570e99d0bae0a2ed76 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 23 Nov 2017 00:09:23 +0300 Subject: [PATCH] Fixed error (static initializers became too complex) [#CLICKHOUSE-2]. --- .../Functions/FunctionsExternalDictionaries.h | 95 +++++++++++-------- 1 file changed, 58 insertions(+), 37 deletions(-) diff --git a/dbms/src/Functions/FunctionsExternalDictionaries.h b/dbms/src/Functions/FunctionsExternalDictionaries.h index 474cd5cd338..50ab42245e4 100644 --- a/dbms/src/Functions/FunctionsExternalDictionaries.h +++ b/dbms/src/Functions/FunctionsExternalDictionaries.h @@ -761,13 +761,14 @@ DECLARE_DICT_GET_TRAITS(UInt32, DataTypeDateTime) DECLARE_DICT_GET_TRAITS(UInt128, DataTypeUUID) #undef DECLARE_DICT_GET_TRAITS -template + +template class FunctionDictGet final : public IFunction { using Type = typename DataType::FieldType; public: - static const std::string name; + static constexpr auto name = Name::name; static FunctionPtr create(const Context & context) { @@ -1060,32 +1061,42 @@ private: const ExternalDictionaries & dictionaries; }; -template -const std::string FunctionDictGet::name = "dictGet" + String(DataType{}.getFamilyName()); +struct NameDictGetUInt8 { static constexpr auto name = "dictGetUInt8"; }; +struct NameDictGetUInt16 { static constexpr auto name = "dictGetUInt16"; }; +struct NameDictGetUInt32 { static constexpr auto name = "dictGetUInt32"; }; +struct NameDictGetUInt64 { static constexpr auto name = "dictGetUInt64"; }; +struct NameDictGetInt8 { static constexpr auto name = "dictGetInt8"; }; +struct NameDictGetInt16 { static constexpr auto name = "dictGetInt16"; }; +struct NameDictGetInt32 { static constexpr auto name = "dictGetInt32"; }; +struct NameDictGetInt64 { static constexpr auto name = "dictGetInt64"; }; +struct NameDictGetFloat32 { static constexpr auto name = "dictGetFloat32"; }; +struct NameDictGetFloat64 { static constexpr auto name = "dictGetFloat64"; }; +struct NameDictGetDate { static constexpr auto name = "dictGetDate"; }; +struct NameDictGetDateTime { static constexpr auto name = "dictGetDateTime"; }; +struct NameDictGetUUID { static constexpr auto name = "dictGetUUID"; }; + +using FunctionDictGetUInt8 = FunctionDictGet; +using FunctionDictGetUInt16 = FunctionDictGet; +using FunctionDictGetUInt32 = FunctionDictGet; +using FunctionDictGetUInt64 = FunctionDictGet; +using FunctionDictGetInt8 = FunctionDictGet; +using FunctionDictGetInt16 = FunctionDictGet; +using FunctionDictGetInt32 = FunctionDictGet; +using FunctionDictGetInt64 = FunctionDictGet; +using FunctionDictGetFloat32 = FunctionDictGet; +using FunctionDictGetFloat64 = FunctionDictGet; +using FunctionDictGetDate = FunctionDictGet; +using FunctionDictGetDateTime = FunctionDictGet; +using FunctionDictGetUUID = FunctionDictGet; -using FunctionDictGetUInt8 = FunctionDictGet; -using FunctionDictGetUInt16 = FunctionDictGet; -using FunctionDictGetUInt32 = FunctionDictGet; -using FunctionDictGetUInt64 = FunctionDictGet; -using FunctionDictGetInt8 = FunctionDictGet; -using FunctionDictGetInt16 = FunctionDictGet; -using FunctionDictGetInt32 = FunctionDictGet; -using FunctionDictGetInt64 = FunctionDictGet; -using FunctionDictGetFloat32 = FunctionDictGet; -using FunctionDictGetFloat64 = FunctionDictGet; -using FunctionDictGetDate = FunctionDictGet; -using FunctionDictGetDateTime = FunctionDictGet; -using FunctionDictGetUUID = FunctionDictGet; - - -template +template class FunctionDictGetOrDefault final : public IFunction { using Type = typename DataType::FieldType; public: - static const std::string name; + static constexpr auto name = Name::name; static FunctionPtr create(const Context & context) { @@ -1318,23 +1329,33 @@ private: const ExternalDictionaries & dictionaries; }; -template -const std::string FunctionDictGetOrDefault::name = "dictGet" + String(DataType{}.getFamilyName()) + "OrDefault"; +struct NameDictGetUInt8OrDefault { static constexpr auto name = "dictGetUInt8OrDefault"; }; +struct NameDictGetUInt16OrDefault { static constexpr auto name = "dictGetUInt16OrDefault"; }; +struct NameDictGetUInt32OrDefault { static constexpr auto name = "dictGetUInt32OrDefault"; }; +struct NameDictGetUInt64OrDefault { static constexpr auto name = "dictGetUInt64OrDefault"; }; +struct NameDictGetInt8OrDefault { static constexpr auto name = "dictGetInt8OrDefault"; }; +struct NameDictGetInt16OrDefault { static constexpr auto name = "dictGetInt16OrDefault"; }; +struct NameDictGetInt32OrDefault { static constexpr auto name = "dictGetInt32OrDefault"; }; +struct NameDictGetInt64OrDefault { static constexpr auto name = "dictGetInt64OrDefault"; }; +struct NameDictGetFloat32OrDefault { static constexpr auto name = "dictGetFloat32OrDefault"; }; +struct NameDictGetFloat64OrDefault { static constexpr auto name = "dictGetFloat64OrDefault"; }; +struct NameDictGetDateOrDefault { static constexpr auto name = "dictGetDateOrDefault"; }; +struct NameDictGetDateTimeOrDefault { static constexpr auto name = "dictGetDateTimeOrDefault"; }; +struct NameDictGetUUIDOrDefault { static constexpr auto name = "dictGetUUIDOrDefault"; }; - -using FunctionDictGetUInt8OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetUInt16OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetUInt32OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetUInt64OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetInt8OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetInt16OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetInt32OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetInt64OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetFloat32OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetFloat64OrDefault = FunctionDictGetOrDefault; -using FunctionDictGetDateOrDefault = FunctionDictGetOrDefault; -using FunctionDictGetDateTimeOrDefault = FunctionDictGetOrDefault; -using FunctionDictGetUUIDOrDefault = FunctionDictGetOrDefault; +using FunctionDictGetUInt8OrDefault = FunctionDictGet; +using FunctionDictGetUInt16OrDefault = FunctionDictGet; +using FunctionDictGetUInt32OrDefault = FunctionDictGet; +using FunctionDictGetUInt64OrDefault = FunctionDictGet; +using FunctionDictGetInt8OrDefault = FunctionDictGet; +using FunctionDictGetInt16OrDefault = FunctionDictGet; +using FunctionDictGetInt32OrDefault = FunctionDictGet; +using FunctionDictGetInt64OrDefault = FunctionDictGet; +using FunctionDictGetFloat32OrDefault = FunctionDictGet; +using FunctionDictGetFloat64OrDefault = FunctionDictGet; +using FunctionDictGetDateOrDefault = FunctionDictGet; +using FunctionDictGetDateTimeOrDefault = FunctionDictGet; +using FunctionDictGetUUIDOrDefault = FunctionDictGet; /// Functions to work with hierarchies.