ClickHouse/src/Interpreters/ExternalDictionariesLoader.h

54 lines
1.8 KiB
C++
Raw Normal View History

2019-09-26 11:19:10 +00:00
#pragma once
#include <memory>
2021-03-19 12:47:27 +00:00
#include <Common/quoteString.h>
#include <Interpreters/ExternalLoader.h>
#include <Dictionaries/IDictionary.h>
2019-09-26 11:19:10 +00:00
namespace DB
{
class Context;
class IExternalLoaderConfigRepository;
2019-09-26 11:19:10 +00:00
/// Manages user-defined dictionaries.
class ExternalDictionariesLoader : public ExternalLoader
{
public:
using DictPtr = std::shared_ptr<const IDictionaryBase>;
/// Dictionaries will be loaded immediately and then will be updated in separate thread, each 'reload_period' seconds.
explicit ExternalDictionariesLoader(Context & global_context_);
2019-09-26 11:19:10 +00:00
DictPtr getDictionary(const std::string & dictionary_name, const Context & context) const;
2021-03-19 12:47:27 +00:00
DictPtr tryGetDictionary(const std::string & dictionary_name, const Context & context) const;
2019-09-26 11:19:10 +00:00
void reloadDictionary(const std::string & dictionary_name, const Context & context) const;
2019-09-26 11:19:10 +00:00
DictionaryStructure getDictionaryStructure(const std::string & dictionary_name, const Context & context) const;
2021-03-18 14:03:22 +00:00
static DictionaryStructure getDictionaryStructure(const Poco::Util::AbstractConfiguration & config, const std::string & key_in_config = "dictionary");
static DictionaryStructure getDictionaryStructure(const ObjectConfig & config);
static void resetAll();
2019-09-26 11:19:10 +00:00
protected:
LoadablePtr create(const std::string & name, const Poco::Util::AbstractConfiguration & config,
2019-12-11 11:09:21 +00:00
const std::string & key_in_config, const std::string & repository_name) const override;
2019-09-26 11:19:10 +00:00
std::string resolveDictionaryName(const std::string & dictionary_name, const std::string & current_database_name) const;
2021-03-19 12:47:27 +00:00
/// Try convert qualified dictionary name to persistent UUID
std::string resolveDictionaryNameFromDatabaseCatalog(const std::string & name) const;
2019-09-26 11:19:10 +00:00
friend class StorageSystemDictionaries;
friend class DatabaseDictionary;
private:
Context & global_context;
2019-09-26 11:19:10 +00:00
};
}