#pragma once #include "IDictionarySource.h" #include #include namespace Poco { namespace Util { class AbstractConfiguration; } class Logger; } namespace DB { class Context; struct DictionaryStructure; /// creates IDictionarySource instance from config and DictionaryStructure class DictionarySourceFactory : private boost::noncopyable { public: static DictionarySourceFactory & instance(); /// 'default_database' - the database where dictionary itself was created. /// It is used as default_database for ClickHouse dictionary source when no explicit database was specified. /// Does not make sense for other sources. using Creator = std::function; DictionarySourceFactory(); void registerSource(const std::string & source_type, Creator create_source); DictionarySourcePtr create( const std::string & name, const Poco::Util::AbstractConfiguration & config, const std::string & config_prefix, const DictionaryStructure & dict_struct, const Context & context, const std::string & default_database, bool check_config) const; private: using SourceRegistry = std::unordered_map; SourceRegistry registered_sources; Poco::Logger * log; }; }