#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;
};
}