ClickHouse/programs/library-bridge/SharedLibraryHandlerFactory.cpp

63 lines
1.8 KiB
C++
Raw Normal View History

2021-03-06 18:21:40 +00:00
#include "SharedLibraryHandlerFactory.h"
namespace DB
{
SharedLibraryHandlerPtr SharedLibraryHandlerFactory::get(const std::string & dictionary_id)
{
std::lock_guard lock(mutex);
auto library_handler = library_handlers.find(dictionary_id);
if (library_handler != library_handlers.end())
return library_handler->second;
return nullptr;
2021-03-06 18:21:40 +00:00
}
2021-03-24 08:41:42 +00:00
void SharedLibraryHandlerFactory::create(
2021-03-24 09:23:29 +00:00
const std::string & dictionary_id,
const std::string & library_path,
const std::vector<std::string> & library_settings,
const Block & sample_block,
2021-03-24 19:32:31 +00:00
const std::vector<std::string> & attributes_names)
2021-03-06 18:21:40 +00:00
{
std::lock_guard lock(mutex);
if (!library_handlers.count(dictionary_id))
library_handlers.emplace(std::make_pair(dictionary_id, std::make_shared<SharedLibraryHandler>(library_path, library_settings, sample_block, attributes_names)));
else
LOG_WARNING(&Poco::Logger::get("SharedLibraryHandlerFactory"), "Library handler with dictionary id {} already exists", dictionary_id);
2021-03-06 18:21:40 +00:00
}
bool SharedLibraryHandlerFactory::clone(const std::string & from_dictionary_id, const std::string & to_dictionary_id)
2021-03-06 18:21:40 +00:00
{
std::lock_guard lock(mutex);
auto from_library_handler = library_handlers.find(from_dictionary_id);
if (from_library_handler == library_handlers.end())
return false;
2021-03-22 15:58:20 +00:00
/// libClone method will be called in copy constructor
library_handlers[to_dictionary_id] = std::make_shared<SharedLibraryHandler>(*from_library_handler->second);
return true;
2021-03-06 18:21:40 +00:00
}
bool SharedLibraryHandlerFactory::remove(const std::string & dictionary_id)
2021-03-06 18:21:40 +00:00
{
std::lock_guard lock(mutex);
2021-03-22 15:58:20 +00:00
/// libDelete is called in destructor.
return library_handlers.erase(dictionary_id);
2021-03-06 18:21:40 +00:00
}
SharedLibraryHandlerFactory & SharedLibraryHandlerFactory::instance()
{
static SharedLibraryHandlerFactory ret;
return ret;
}
}