#pragma once #include #include #include #include namespace DB { class Context; /// Manages user-defined dictionaries. class ExternalDictionaries : public ExternalLoader { public: using DictPtr = std::shared_ptr; /// Dictionaries will be loaded immediately and then will be updated in separate thread, each 'reload_period' seconds. ExternalDictionaries( std::unique_ptr config_repository, const Poco::Util::AbstractConfiguration & config, Context & context); /// Forcibly reloads specified dictionary. void reloadDictionary(const std::string & name) { reload(name); } DictPtr getDictionary(const std::string & name) const { return std::static_pointer_cast(getLoadable(name)); } DictPtr tryGetDictionary(const std::string & name) const { return std::static_pointer_cast(tryGetLoadable(name)); } protected: std::unique_ptr create(const std::string & name, const Configuration & config, const std::string & config_prefix) const override; using ExternalLoader::getObjectsMap; friend class StorageSystemDictionaries; friend class DatabaseDictionary; private: Context & context; }; }