#pragma once #include <Interpreters/Context_fwd.h> #include <Server/HTTP/HTTPRequestHandler.h> #include <Poco/Logger.h> #include <mutex> #include <unordered_map> namespace DB { /** Main handler for requests to ODBC driver * requires connection_string and columns in request params * and also query in request body * response in RowBinary format */ class ODBCHandler : public HTTPRequestHandler, WithContext { public: ODBCHandler( size_t keep_alive_timeout_, ContextPtr context_, const String & mode_) : WithContext(context_) , log(getLogger("ODBCHandler")) , keep_alive_timeout(keep_alive_timeout_) , mode(mode_) { } void handleRequest(HTTPServerRequest & request, HTTPServerResponse & response, const ProfileEvents::Event & write_event) override; private: LoggerPtr log; size_t keep_alive_timeout; String mode; static inline std::mutex mutex; void processError(HTTPServerResponse & response, const std::string & message); }; }