#pragma once #include "ExternalDictionaryLibraryHandler.h" #include #include #include namespace DB { /// Each library dictionary source has unique UUID. When clone() method is called, a new UUID is generated. /// There is a unique mapping from dictionary UUID to sharedLibraryHandler. class ExternalDictionaryLibraryHandlerFactory final : private boost::noncopyable { public: static ExternalDictionaryLibraryHandlerFactory & instance(); SharedLibraryHandlerPtr get(const std::string & dictionary_id); void create( const std::string & dictionary_id, const std::string & library_path, const std::vector & library_settings, const Block & sample_block, const std::vector & attributes_names); bool clone(const std::string & from_dictionary_id, const std::string & to_dictionary_id); bool remove(const std::string & dictionary_id); private: /// map: dict_id -> sharedLibraryHandler std::unordered_map library_handlers TSA_GUARDED_BY(mutex); std::mutex mutex; }; }