1#include "HandlerFactory.h"
2#include "PingHandler.h"
3#include "ColumnInfoHandler.h"
4#include <Poco/URI.h>
5#include <Poco/Net/HTTPServerRequest.h>
6#include <common/logger_useful.h>
7
8namespace DB
9{
10Poco::Net::HTTPRequestHandler * HandlerFactory::createRequestHandler(const Poco::Net::HTTPServerRequest & request)
11{
12 Poco::URI uri{request.getURI()};
13 LOG_TRACE(log, "Request URI: " + uri.toString());
14
15 if (uri.getPath() == "/ping" && request.getMethod() == Poco::Net::HTTPRequest::HTTP_GET)
16 return new PingHandler(keep_alive_timeout);
17
18 if (request.getMethod() == Poco::Net::HTTPRequest::HTTP_POST)
19 {
20
21 if (uri.getPath() == "/columns_info")
22#if USE_POCO_SQLODBC || USE_POCO_DATAODBC
23 return new ODBCColumnsInfoHandler(keep_alive_timeout, context);
24#else
25 return nullptr;
26#endif
27 else if (uri.getPath() == "/identifier_quote")
28#if USE_POCO_SQLODBC || USE_POCO_DATAODBC
29 return new IdentifierQuoteHandler(keep_alive_timeout, context);
30#else
31 return nullptr;
32#endif
33 else
34 return new ODBCHandler(pool_map, keep_alive_timeout, context);
35 }
36 return nullptr;
37}
38}
39