7 #include <boost/asio/ssl.hpp> 10 #include <boost/thread/mutex.hpp> 17 #include "gpudb/Avro.hpp" 53 class GPUdb :
private boost::noncopyable
61 #ifndef GPUDB_NO_HTTPS 74 #ifndef GPUDB_NO_HTTPS 88 #ifndef GPUDB_NO_HTTPS 89 boost::asio::ssl::context* m_sslContext;
92 std::string m_username;
93 std::string m_password;
96 avro::ExecutorPtr m_executor;
97 std::map<std::string, std::string> m_httpHeaders;
110 const std::vector<HttpUrl>&
getUrls()
const;
112 #ifndef GPUDB_NO_HTTPS 124 template<
typename TRequest,
typename TResponse>
126 const TRequest& request,
128 const bool enableCompression =
false)
const 130 std::vector<uint8_t> requestBytes;
131 avro::encode(requestBytes, request);
133 submitRequestRaw(url, requestBytes, gpudbResponse, enableCompression);
134 avro::decode(response, gpudbResponse.
data);
138 template<
typename TRequest,
typename TResponse>
140 const TRequest& request,
142 const bool enableCompression =
false)
const 144 std::vector<uint8_t> requestBytes;
145 avro::encode(requestBytes, request);
147 submitRequestRaw(endpoint, requestBytes, gpudbResponse, enableCompression);
148 avro::decode(response, gpudbResponse.
data);
152 template<
typename TRequest,
typename TResponse>
154 const TRequest& request,
156 const bool enableCompression =
false)
const 158 submitRequest( (std::string) endpoint, request, response, enableCompression );
165 void addKnownType(
const std::string& typeId,
const avro::DecoderPtr& decoder);
174 void addKnownType(
const std::string& typeId,
const std::string& schemaString)
176 addKnownType(typeId, avro::createDecoder<T>(schemaString));
180 void addKnownType(
const std::string& typeId, const ::avro::ValidSchema& schema)
206 static const std::string API_VERSION;
208 std::vector<HttpUrl> m_urls;
209 mutable boost::mutex m_urlMutex;
210 mutable size_t m_currentUrl;
212 #ifndef GPUDB_NO_HTTPS 213 boost::asio::ssl::context* m_sslContext;
216 std::string m_username;
217 std::string m_password;
218 std::string m_authorization;
220 size_t m_threadCount;
221 avro::ExecutorPtr m_executor;
222 std::map<std::string, std::string> m_httpHeaders;
225 mutable std::map<std::string, avro::DecoderPtr> m_knownTypes;
226 mutable boost::mutex m_knownTypesMutex;
228 const HttpUrl* getUrlPointer()
const;
230 void initHttpRequest(
HttpRequest& httpRequest)
const;
231 void submitRequestRaw(
const std::string& endpoint,
232 const std::vector<uint8_t>& request,
234 const bool enableCompression)
const;
235 void submitRequestRaw(
const HttpUrl& url,
236 const std::vector<uint8_t>& request,
238 const bool enableCompression,
239 const bool throwOnError =
true)
const;
240 avro::DecoderPtr getDecoder(
const std::string& typeId)
const;
241 void setDecoderIfMissing(
const std::string& typeId,
242 const std::string& label,
243 const std::string& schemaString,
244 const std::map<std::string, std::vector<std::string> >& properties)
const;
Options & setSslContext(boost::asio::ssl::context *value)
void addKnownType(const std::string &typeId, const avro::DecoderPtr &decoder)
std::string getPassword() const
void addKnownTypeFromTable(const std::string &tableName, const ::avro::ValidSchema &schema)
Options & setHttpHeaders(const std::map< std::string, std::string > &value)
boost::asio::ssl::context * getSslContext() const
std::string getUsername() const
TResponse & submitRequest(const HttpUrl &url, const TRequest &request, TResponse &response, const bool enableCompression=false) const
GPUdb(const HttpUrl &url, const Options &options=Options())
const std::vector< HttpUrl > & getUrls() const
void addKnownType(const std::string &typeId)
void addKnownTypeFromTable(const std::string &tableName)
TResponse & submitRequest(const std::string &endpoint, const TRequest &request, TResponse &response, const bool enableCompression=false) const
avro::ExecutorPtr getExecutor() const
size_t getThreadCount() const
bool getUseSnappy() const
size_t getTimeout() const
Options & setUsername(const std::string &value)
A set of output parameters forendpoint /gpudbresponse}.
void addKnownTypeFromTable(const std::string &tableName, const avro::DecoderPtr &decoder)
void addKnownType(const std::string &typeId, const ::avro::ValidSchema &schema)
static std::string getApiVersion()
Options & setExecutor(const avro::ExecutorPtr value)
std::map< std::string, std::string > & getHttpHeaders()
static const int64_t END_OF_SET
Options & setTimeout(const size_t value)
Options & setThreadCount(const size_t value)
void addKnownTypeFromTable(const std::string &tableName, const std::string &schemaString)
const HttpUrl & getUrl() const
Options & addHttpHeader(const std::string &header, const std::string &value)
Options & setUseSnappy(const bool value)
TResponse & submitRequest(const char *endpoint, const TRequest &request, TResponse &response, const bool enableCompression=false) const
Options & setPassword(const std::string &value)
void addKnownType(const std::string &typeId, const std::string &schemaString)
std::vector< uint8_t > data