2019-11-06 16:05:04 +00:00
|
|
|
#include <Databases/DatabaseOnDisk.h>
|
2019-12-30 23:30:06 +00:00
|
|
|
#include <ext/scope_guard.h>
|
2019-11-05 20:26:14 +00:00
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
|
|
|
|
2019-11-06 16:05:04 +00:00
|
|
|
class DatabaseWithDictionaries : public DatabaseOnDisk
|
2019-11-05 20:26:14 +00:00
|
|
|
{
|
|
|
|
public:
|
2020-04-12 20:50:32 +00:00
|
|
|
void attachDictionary(const String & dictionary_name, const DictionaryAttachInfo & attach_info) override;
|
2019-11-05 20:26:14 +00:00
|
|
|
|
2020-04-12 20:50:32 +00:00
|
|
|
void detachDictionary(const String & dictionary_name) override;
|
2019-11-06 16:05:04 +00:00
|
|
|
|
|
|
|
void createDictionary(const Context & context,
|
|
|
|
const String & dictionary_name,
|
|
|
|
const ASTPtr & query) override;
|
|
|
|
|
|
|
|
void removeDictionary(const Context & context, const String & dictionary_name) override;
|
2019-11-05 20:26:14 +00:00
|
|
|
|
2020-04-12 20:50:32 +00:00
|
|
|
bool isDictionaryExist(const Context & context, const String & dictionary_name) const override;
|
2019-11-05 20:26:14 +00:00
|
|
|
|
2020-04-20 11:09:09 +00:00
|
|
|
DatabaseDictionariesIteratorPtr getDictionariesIterator(const FilterByNameFunction & filter_by_dictionary_name) override;
|
2020-04-09 22:32:59 +00:00
|
|
|
|
2020-04-12 20:50:32 +00:00
|
|
|
Poco::AutoPtr<Poco::Util::AbstractConfiguration> getDictionaryConfiguration(const String & /*name*/) const override;
|
2019-11-05 20:26:14 +00:00
|
|
|
|
2020-04-12 20:50:32 +00:00
|
|
|
time_t getObjectMetadataModificationTime(const String & object_name) const override;
|
2019-11-05 20:26:14 +00:00
|
|
|
|
2020-04-12 20:50:32 +00:00
|
|
|
bool empty(const Context & context) const override;
|
2019-11-05 20:26:14 +00:00
|
|
|
|
2019-12-30 23:30:06 +00:00
|
|
|
void shutdown() override;
|
|
|
|
|
|
|
|
~DatabaseWithDictionaries() override;
|
|
|
|
|
2019-11-05 20:26:14 +00:00
|
|
|
protected:
|
2020-04-06 23:22:44 +00:00
|
|
|
DatabaseWithDictionaries(const String & name, const String & metadata_path_, const String & data_path_, const String & logger, const Context & context)
|
|
|
|
: DatabaseOnDisk(name, metadata_path_, data_path_, logger, context) {}
|
2019-11-05 20:26:14 +00:00
|
|
|
|
2019-12-30 23:30:06 +00:00
|
|
|
void attachToExternalDictionariesLoader(Context & context);
|
|
|
|
void detachFromExternalDictionariesLoader();
|
2019-11-05 20:26:14 +00:00
|
|
|
|
2020-04-12 20:50:32 +00:00
|
|
|
void detachDictionaryImpl(const String & dictionary_name, DictionaryAttachInfo & attach_info);
|
2019-11-05 20:26:14 +00:00
|
|
|
|
2019-11-06 16:05:04 +00:00
|
|
|
ASTPtr getCreateDictionaryQueryImpl(const Context & context,
|
|
|
|
const String & dictionary_name,
|
|
|
|
bool throw_on_error) const override;
|
2019-12-30 23:30:06 +00:00
|
|
|
|
2020-04-12 20:50:32 +00:00
|
|
|
std::unordered_map<String, DictionaryAttachInfo> dictionaries;
|
|
|
|
|
2019-12-30 23:30:06 +00:00
|
|
|
private:
|
2020-04-12 20:50:32 +00:00
|
|
|
ExternalDictionariesLoader * external_loader = nullptr;
|
2019-12-30 23:30:06 +00:00
|
|
|
ext::scope_guard database_as_config_repo_for_external_loader;
|
2019-11-05 20:26:14 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|