mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
More methods
This commit is contained in:
parent
dd4a7b6e3d
commit
e0cda1033a
@ -79,12 +79,22 @@ void LibraryRequestHandler::handleRequest(HTTPServerRequest & request, HTTPServe
|
||||
LOG_TRACE(log, "Library path: '{}', library_settings: '{}'", library_path, library_settings);
|
||||
|
||||
library_handler->libNew(library_path, library_settings);
|
||||
writeStringBinary("Ok.", out);
|
||||
writeStringBinary("1", out);
|
||||
}
|
||||
else if (method == "libDelete")
|
||||
{
|
||||
//library_handler->libDelete();
|
||||
writeStringBinary("Ok.", out);
|
||||
writeStringBinary("1", out);
|
||||
}
|
||||
else if (method == "isModified")
|
||||
{
|
||||
auto res = library_handler->isModified();
|
||||
writeStringBinary(std::to_string(res), out);
|
||||
}
|
||||
else if (method == "supportsSelectiveLoad")
|
||||
{
|
||||
auto res = library_handler->supportsSelectiveLoad();
|
||||
writeStringBinary(std::to_string(res), out);
|
||||
}
|
||||
else if (method == "loadAll")
|
||||
{
|
||||
@ -112,6 +122,42 @@ void LibraryRequestHandler::handleRequest(HTTPServerRequest & request, HTTPServe
|
||||
auto input = library_handler->loadAll(attributes, *sample_block);
|
||||
BlockOutputStreamPtr output = FormatFactory::instance().getOutputStream("RowBinary", out, *sample_block, context);
|
||||
|
||||
copyData(*input, *output);
|
||||
}
|
||||
else if (method == "loadIds")
|
||||
{
|
||||
if (!params.has("attributes"))
|
||||
{
|
||||
processError(response, "No 'attributes' in request URL");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!params.has("ids"))
|
||||
{
|
||||
processError(response, "No 'ids' in request URL");
|
||||
return;
|
||||
}
|
||||
|
||||
std::string attributes = params.get("attributes");
|
||||
std::string ids = params.get("ids");
|
||||
|
||||
std::string columns = params.get("columns");
|
||||
std::shared_ptr<Block> sample_block;
|
||||
|
||||
try
|
||||
{
|
||||
sample_block = parseColumns(std::move(columns));
|
||||
}
|
||||
catch (const Exception & ex)
|
||||
{
|
||||
processError(response, "Invalid 'columns' parameter in request body '" + ex.message() + "'");
|
||||
LOG_WARNING(log, ex.getStackTraceString());
|
||||
return;
|
||||
}
|
||||
|
||||
auto input = library_handler->loadIds(attributes, ids, *sample_block);
|
||||
BlockOutputStreamPtr output = FormatFactory::instance().getOutputStream("RowBinary", out, *sample_block, context);
|
||||
|
||||
copyData(*input, *output);
|
||||
}
|
||||
}
|
||||
|
@ -39,13 +39,32 @@ void SharedLibraryHandler::libNew(const std::string & path, const std::string &
|
||||
settings_holder = std::make_shared<CStringsHolder>(CStringsHolder(lib_settings));
|
||||
|
||||
auto lib_new = library->tryGet<decltype(lib_data) (*)(
|
||||
decltype(&settings_holder->strings), decltype(&ClickHouseLibrary::log))>("ClickHouseDictionary_v3_libNew");
|
||||
decltype(&settings_holder->strings), decltype(&ClickHouseLibrary::log))>("ClickHouseDictionary_v3_libNew");
|
||||
|
||||
if (lib_new)
|
||||
lib_data = lib_new(&settings_holder->strings, ClickHouseLibrary::log);
|
||||
}
|
||||
|
||||
|
||||
bool SharedLibraryHandler::isModified()
|
||||
{
|
||||
if (auto func_is_modified = library->tryGet<bool (*)(
|
||||
decltype(lib_data), decltype(&settings_holder->strings))>("ClickHouseDictionary_v3_isModified"))
|
||||
return func_is_modified(lib_data, &settings_holder->strings);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SharedLibraryHandler::supportsSelectiveLoad()
|
||||
{
|
||||
if (auto func_supports_selective_load = library->tryGet<bool (*)(
|
||||
decltype(lib_data), decltype(&settings_holder->strings))>("ClickHouseDictionary_v3_supportsSelectiveLoad"))
|
||||
return func_supports_selective_load(lib_data, &settings_holder->strings);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//void SharedLibraryHandler::libCloneOrNew()
|
||||
//{
|
||||
// if (auto lib_clone = library->tryGet<decltype(lib_data) (*)(decltype(other.lib_data))>("ClickHouseDictionary_v3_libClone"))
|
||||
|
@ -28,6 +28,10 @@ public:
|
||||
|
||||
BlockInputStreamPtr loadIds(const std::string & ids_string, const std::string & attributes_string, const Block & sample_block);
|
||||
|
||||
bool isModified();
|
||||
|
||||
bool supportsSelectiveLoad();
|
||||
|
||||
private:
|
||||
Block dataToBlock(const Block & sample_block, const void * data);
|
||||
|
||||
|
@ -66,15 +66,13 @@ bool LibraryBridgeHelper::initLibrary(const std::string & library_path, const st
|
||||
startLibraryBridgeSync();
|
||||
|
||||
auto uri = getDictionaryURI();
|
||||
uri.addQueryParameter("method", LIBNEW_METHOD);
|
||||
uri.addQueryParameter("method", LIB_NEW_METHOD);
|
||||
uri.addQueryParameter("library_path", library_path);
|
||||
uri.addQueryParameter("library_settings", library_settings);
|
||||
|
||||
ReadWriteBufferFromHTTP buf(uri, Poco::Net::HTTPRequest::HTTP_POST, {}, ConnectionTimeouts::getHTTPTimeouts(context));
|
||||
|
||||
bool res;
|
||||
readBoolText(res, buf);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -84,13 +82,39 @@ bool LibraryBridgeHelper::deleteLibrary()
|
||||
startLibraryBridgeSync();
|
||||
|
||||
auto uri = getDictionaryURI();
|
||||
uri.addQueryParameter("method", LIBDELETE_METHOD);
|
||||
uri.addQueryParameter("method", LIB_DELETE_METHOD);
|
||||
|
||||
ReadWriteBufferFromHTTP buf(uri, Poco::Net::HTTPRequest::HTTP_POST, {}, ConnectionTimeouts::getHTTPTimeouts(context));
|
||||
|
||||
bool res;
|
||||
readBoolText(res, buf);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
bool LibraryBridgeHelper::isModified()
|
||||
{
|
||||
startLibraryBridgeSync();
|
||||
|
||||
auto uri = getDictionaryURI();
|
||||
uri.addQueryParameter("method", IS_MODIFIED_METHOD);
|
||||
|
||||
ReadWriteBufferFromHTTP buf(uri, Poco::Net::HTTPRequest::HTTP_POST, {}, ConnectionTimeouts::getHTTPTimeouts(context));
|
||||
bool res;
|
||||
readBoolText(res, buf);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
bool LibraryBridgeHelper::supportsSelectiveLoad()
|
||||
{
|
||||
startLibraryBridgeSync();
|
||||
|
||||
auto uri = getDictionaryURI();
|
||||
uri.addQueryParameter("method", SUPPORTS_SELECTIVE_LOAD_METHOD);
|
||||
|
||||
ReadWriteBufferFromHTTP buf(uri, Poco::Net::HTTPRequest::HTTP_POST, {}, ConnectionTimeouts::getHTTPTimeouts(context));
|
||||
bool res;
|
||||
readBoolText(res, buf);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -101,7 +125,7 @@ BlockInputStreamPtr LibraryBridgeHelper::loadAll(const std::string attributes_st
|
||||
|
||||
auto uri = getDictionaryURI();
|
||||
|
||||
uri.addQueryParameter("method", LOADALL_METHOD);
|
||||
uri.addQueryParameter("method", LOAD_ALL_METHOD);
|
||||
uri.addQueryParameter("attributes", attributes_string);
|
||||
uri.addQueryParameter("columns", sample_block.getNamesAndTypesList().toString());
|
||||
|
||||
@ -123,7 +147,7 @@ BlockInputStreamPtr LibraryBridgeHelper::loadIds(const std::string attributes_st
|
||||
|
||||
auto uri = getDictionaryURI();
|
||||
|
||||
uri.addQueryParameter("method", LOADALL_METHOD);
|
||||
uri.addQueryParameter("method", LOAD_IDS_METHOD);
|
||||
uri.addQueryParameter("attributes", attributes_string);
|
||||
uri.addQueryParameter("ids", ids_string);
|
||||
uri.addQueryParameter("columns", sample_block.getNamesAndTypesList().toString());
|
||||
@ -145,7 +169,7 @@ bool LibraryBridgeHelper::isLibraryBridgeRunning() const
|
||||
try
|
||||
{
|
||||
ReadWriteBufferFromHTTP buf(getPingURI(), Poco::Net::HTTPRequest::HTTP_GET, {}, ConnectionTimeouts::getHTTPTimeouts(context));
|
||||
return checkString(LibraryBridgeHelper::PING_OK_ANSWER, buf);
|
||||
return checkString(PING_OK_ANSWER, buf);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
|
@ -33,15 +33,21 @@ public:
|
||||
|
||||
BlockInputStreamPtr loadIds(const std::string attributes_string, const std::string ids_string, const Block & sample_block);
|
||||
|
||||
bool isModified();
|
||||
|
||||
bool supportsSelectiveLoad();
|
||||
|
||||
static constexpr inline size_t DEFAULT_PORT = 9018;
|
||||
static constexpr inline auto DEFAULT_HOST = "127.0.0.1";
|
||||
|
||||
static constexpr inline auto PING_HANDLER = "/ping";
|
||||
static constexpr inline auto MAIN_HANDLER = "/";
|
||||
|
||||
static constexpr inline auto LIBNEW_METHOD = "libNew";
|
||||
static constexpr inline auto LIBDELETE_METHOD = "libDelete";
|
||||
static constexpr inline auto LOADALL_METHOD = "loadAll";
|
||||
static constexpr inline auto LIB_NEW_METHOD = "libNew";
|
||||
static constexpr inline auto LIB_DELETE_METHOD = "libDelete";
|
||||
static constexpr inline auto LOAD_ALL_METHOD = "loadAll";
|
||||
static constexpr inline auto LOAD_IDS_METHOD = "loadIds";
|
||||
static constexpr inline auto IS_MODIFIED_METHOD = "isModified";
|
||||
static constexpr inline auto SUPPORTS_SELECTIVE_LOAD_METHOD = "supportsSelectiveLoad";
|
||||
|
||||
static constexpr inline auto DEFAULT_FORMAT = "RowBinary";
|
||||
static constexpr inline auto PING_OK_ANSWER = "Ok.";
|
||||
|
@ -189,19 +189,13 @@ BlockInputStreamPtr LibraryDictionarySource::loadKeys(const Columns &/* key_colu
|
||||
|
||||
bool LibraryDictionarySource::isModified() const
|
||||
{
|
||||
//if (auto func_is_modified = library->tryGet<bool (*)(decltype(lib_data), decltype(&settings->strings))>("ClickHouseDictionary_v3_isModified"))
|
||||
// return func_is_modified(lib_data, &settings->strings);
|
||||
|
||||
return true;
|
||||
return bridge_helper->isModified();
|
||||
}
|
||||
|
||||
|
||||
bool LibraryDictionarySource::supportsSelectiveLoad() const
|
||||
{
|
||||
//if (auto func_supports_selective_load = library->tryGet<bool (*)(decltype(lib_data), decltype(&settings->strings))>("ClickHouseDictionary_v3_supportsSelectiveLoad"))
|
||||
// return func_supports_selective_load(lib_data, &settings->strings);
|
||||
|
||||
return true;
|
||||
return bridge_helper->supportsSelectiveLoad();
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user