GPUdb C++ API  Version 6.1.0.0
GPUdb.hpp
Go to the documentation of this file.
1 #ifndef __GPUDB_HPP__
2 #define __GPUDB_HPP__
3 
5 
6 #ifndef GPUDB_NO_HTTPS
7 #include <boost/asio/ssl.hpp>
8 #endif
9 
10 #include <boost/thread/mutex.hpp>
11 
12 namespace gpudb
13 {
14  class GPUdb;
15 }
16 
17 #include "gpudb/Avro.hpp"
18 #include "gpudb/GenericRecord.hpp"
19 #include "gpudb/GPUdbException.hpp"
20 #include "gpudb/Http.hpp"
21 #include "gpudb/Type.hpp"
23 
24 
51 namespace gpudb
52 {
53  class GPUdb : private boost::noncopyable
54  {
55  public:
56  class Options
57  {
58  public:
59  Options();
60 
61  #ifndef GPUDB_NO_HTTPS
62  boost::asio::ssl::context* getSslContext() const;
63  #endif
64 
65  std::string getUsername() const;
66  std::string getPassword() const;
67  bool getUseSnappy() const;
68  size_t getThreadCount() const;
69  avro::ExecutorPtr getExecutor() const;
70  std::map<std::string, std::string>& getHttpHeaders();
71  const std::map<std::string, std::string>& getHttpHeaders() const;
72  size_t getTimeout() const;
73 
74  #ifndef GPUDB_NO_HTTPS
75  Options& setSslContext(boost::asio::ssl::context* value);
76  #endif
77 
78  Options& setUsername(const std::string& value);
79  Options& setPassword(const std::string& value);
80  Options& setUseSnappy(const bool value);
81  Options& setThreadCount(const size_t value);
82  Options& setExecutor(const avro::ExecutorPtr value);
83  Options& setHttpHeaders(const std::map<std::string, std::string>& value);
84  Options& addHttpHeader(const std::string& header, const std::string& value);
85  Options& setTimeout(const size_t value);
86 
87  private:
88  #ifndef GPUDB_NO_HTTPS
89  boost::asio::ssl::context* m_sslContext;
90  #endif
91 
92  std::string m_username;
93  std::string m_password;
94  bool m_useSnappy;
95  size_t m_threadCount;
96  avro::ExecutorPtr m_executor;
97  std::map<std::string, std::string> m_httpHeaders;
98  size_t m_timeout;
99  };
100 
101  static const int64_t END_OF_SET = -9999;
102 
103  static inline std::string getApiVersion() { return GPUdb::API_VERSION; }
104 
105  GPUdb(const HttpUrl& url, const Options& options = Options());
106  GPUdb(const std::string& url, const Options& options = Options());
107  GPUdb(const std::vector<HttpUrl>& urls, const Options& options = Options());
108  GPUdb(const std::vector<std::string>& urls, const Options& options = Options());
109  const HttpUrl& getUrl() const;
110  const std::vector<HttpUrl>& getUrls() const;
111 
112  #ifndef GPUDB_NO_HTTPS
113  boost::asio::ssl::context* getSslContext() const;
114  #endif
115 
116  const std::string& getUsername() const;
117  const std::string& getPassword() const;
118  bool getUseSnappy() const;
119  size_t getThreadCount() const;
120  avro::ExecutorPtr getExecutor() const;
121  const std::map<std::string, std::string>& getHttpHeaders() const;
122  size_t getTimeout() const;
123 
124  template<typename TRequest, typename TResponse>
125  TResponse& submitRequest(const HttpUrl& url,
126  const TRequest& request,
127  TResponse& response,
128  const bool enableCompression = false) const
129  {
130  std::vector<uint8_t> requestBytes;
131  avro::encode(requestBytes, request);
132  GpudbResponse gpudbResponse;
133  submitRequestRaw(url, requestBytes, gpudbResponse, enableCompression);
134  avro::decode(response, gpudbResponse.data);
135  return response;
136  }
137 
138  template<typename TRequest, typename TResponse>
139  TResponse& submitRequest(const std::string& endpoint,
140  const TRequest& request,
141  TResponse& response,
142  const bool enableCompression = false) const
143  {
144  std::vector<uint8_t> requestBytes;
145  avro::encode(requestBytes, request);
146  GpudbResponse gpudbResponse;
147  submitRequestRaw(endpoint, requestBytes, gpudbResponse, enableCompression);
148  avro::decode(response, gpudbResponse.data);
149  return response;
150  }
151 
152  template<typename TRequest, typename TResponse>
153  TResponse& submitRequest(const char* endpoint,
154  const TRequest& request,
155  TResponse& response,
156  const bool enableCompression = false) const
157  {
158  submitRequest( (std::string) endpoint, request, response, enableCompression );
159  return response;
160  }
161 
162 
163  #include "gpudb/GPUdbFunctions.hpp"
164 
165  void addKnownType(const std::string& typeId, const avro::DecoderPtr& decoder);
166 
167  template<typename T>
168  void addKnownType(const std::string& typeId)
169  {
170  addKnownType(typeId, avro::createDecoder<T>());
171  }
172 
173  template<typename T>
174  void addKnownType(const std::string& typeId, const std::string& schemaString)
175  {
176  addKnownType(typeId, avro::createDecoder<T>(schemaString));
177  }
178 
179  template<typename T>
180  void addKnownType(const std::string& typeId, const ::avro::ValidSchema& schema)
181  {
182  addKnownType(typeId, avro::createDecoder<T>(schema));
183  }
184 
185  void addKnownTypeFromTable(const std::string& tableName, const avro::DecoderPtr& decoder);
186 
187  template<typename T>
188  void addKnownTypeFromTable(const std::string& tableName)
189  {
190  addKnownTypeFromTable(tableName, avro::createDecoder<T>());
191  }
192 
193  template<typename T>
194  void addKnownTypeFromTable(const std::string& tableName, const std::string& schemaString)
195  {
196  addKnownTypeFromTable(tableName, avro::createDecoder<T>(schemaString));
197  }
198 
199  template<typename T>
200  void addKnownTypeFromTable(const std::string& tableName, const ::avro::ValidSchema& schema)
201  {
202  addKnownTypeFromTable(tableName, avro::createDecoder<T>(schema));
203  }
204 
205  private:
206  static const std::string API_VERSION;
207 
208  std::vector<HttpUrl> m_urls;
209  mutable boost::mutex m_urlMutex;
210  mutable size_t m_currentUrl;
211 
212  #ifndef GPUDB_NO_HTTPS
213  boost::asio::ssl::context* m_sslContext;
214  #endif
215 
216  std::string m_username;
217  std::string m_password;
218  std::string m_authorization;
219  bool m_useSnappy;
220  size_t m_threadCount;
221  avro::ExecutorPtr m_executor;
222  std::map<std::string, std::string> m_httpHeaders;
223  size_t m_timeout;
224 
225  mutable std::map<std::string, avro::DecoderPtr> m_knownTypes;
226  mutable boost::mutex m_knownTypesMutex;
227 
228  const HttpUrl* getUrlPointer() const;
229  const HttpUrl* switchUrl(const HttpUrl* oldUrl) const;
230  void initHttpRequest(HttpRequest& httpRequest) const;
231  void submitRequestRaw(const std::string& endpoint,
232  const std::vector<uint8_t>& request,
233  GpudbResponse& response,
234  const bool enableCompression) const;
235  void submitRequestRaw(const HttpUrl& url,
236  const std::vector<uint8_t>& request,
237  GpudbResponse& response,
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;
245  };
246 
247  #include "gpudb/GPUdbTemplates.hpp"
248 }
249 
250 #endif
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)
Definition: GPUdb.hpp:200
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
Definition: GPUdb.hpp:125
GPUdb(const HttpUrl &url, const Options &options=Options())
const std::vector< HttpUrl > & getUrls() const
void addKnownType(const std::string &typeId)
Definition: GPUdb.hpp:168
void addKnownTypeFromTable(const std::string &tableName)
Definition: GPUdb.hpp:188
TResponse & submitRequest(const std::string &endpoint, const TRequest &request, TResponse &response, const bool enableCompression=false) const
Definition: GPUdb.hpp:139
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}.
Definition: gpudb_wrapper.h:17
void addKnownTypeFromTable(const std::string &tableName, const avro::DecoderPtr &decoder)
void addKnownType(const std::string &typeId, const ::avro::ValidSchema &schema)
Definition: GPUdb.hpp:180
static std::string getApiVersion()
Definition: GPUdb.hpp:103
Options & setExecutor(const avro::ExecutorPtr value)
std::map< std::string, std::string > & getHttpHeaders()
static const int64_t END_OF_SET
Definition: GPUdb.hpp:101
Options & setTimeout(const size_t value)
Options & setThreadCount(const size_t value)
void addKnownTypeFromTable(const std::string &tableName, const std::string &schemaString)
Definition: GPUdb.hpp:194
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
Definition: GPUdb.hpp:153
Options & setPassword(const std::string &value)
void addKnownType(const std::string &typeId, const std::string &schemaString)
Definition: GPUdb.hpp:174
std::vector< uint8_t > data
Definition: gpudb_wrapper.h:35