Apache Ignite C++
query_sql.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
23 #ifndef _IGNITE_CACHE_QUERY_QUERY_SQL
24 #define _IGNITE_CACHE_QUERY_QUERY_SQL
25 
26 #include <stdint.h>
27 #include <string>
28 #include <vector>
29 
30 #include <ignite/impl/cache/query/query_argument.h>
32 
33 namespace ignite
34 {
35  namespace cache
36  {
37  namespace query
38  {
44  class SqlQuery
45  {
46  public:
53  SqlQuery(const std::string& type, const std::string& sql) :
54  type(type),
55  sql(sql),
56  pageSize(1024),
57  loc(false),
58  distributedJoins(false),
59  args()
60  {
61  // No-op.
62  }
63 
69  SqlQuery(const SqlQuery& other) :
70  type(other.type),
71  sql(other.sql),
72  pageSize(other.pageSize),
73  loc(other.loc),
74  distributedJoins(other.distributedJoins),
75  args()
76  {
77  args.reserve(other.args.size());
78 
79  typedef std::vector<impl::cache::query::QueryArgumentBase*>::const_iterator Iter;
80 
81  for (Iter i = other.args.begin(); i != other.args.end(); ++i)
82  args.push_back((*i)->Copy());
83  }
84 
90  SqlQuery& operator=(const SqlQuery& other)
91  {
92  if (this != &other)
93  {
94  SqlQuery tmp(other);
95 
96  Swap(tmp);
97  }
98 
99  return *this;
100  }
101 
106  {
107  typedef std::vector<impl::cache::query::QueryArgumentBase*>::const_iterator Iter;
108 
109  for (Iter it = args.begin(); it != args.end(); ++it)
110  delete *it;
111  }
112 
118  void Swap(SqlQuery& other)
119  {
120  if (this != &other)
121  {
122  std::swap(type, other.type);
123  std::swap(sql, other.sql);
124  std::swap(pageSize, other.pageSize);
125  std::swap(loc, other.loc);
126  std::swap(distributedJoins, other.distributedJoins);
127  std::swap(args, other.args);
128  }
129  }
130 
136  const std::string& GetType() const
137  {
138  return type;
139  }
140 
146  void SetType(const std::string& type)
147  {
148  this->type = type;
149  }
150 
156  const std::string& GetSql() const
157  {
158  return sql;
159  }
160 
166  void SetSql(const std::string& sql)
167  {
168  this->sql = sql;
169  }
170 
176  int32_t GetPageSize() const
177  {
178  return pageSize;
179  }
180 
186  void SetPageSize(int32_t pageSize)
187  {
188  this->pageSize = pageSize;
189  }
190 
196  bool IsLocal() const
197  {
198  return loc;
199  }
200 
206  void SetLocal(bool loc)
207  {
208  this->loc = loc;
209  }
210 
216  bool IsDistributedJoins() const
217  {
218  return distributedJoins;
219  }
220 
229  void SetDistributedJoins(bool enabled)
230  {
231  distributedJoins = enabled;
232  }
233 
243  template<typename T>
244  void AddArgument(const T& arg)
245  {
246  args.push_back(new impl::cache::query::QueryArgument<T>(arg));
247  }
248 
253  {
254  std::vector<impl::cache::query::QueryArgumentBase*>::iterator iter;
255  for (iter = args.begin(); iter != args.end(); ++iter)
256  delete *iter;
257 
258  args.clear();
259  }
260 
266  void Write(binary::BinaryRawWriter& writer) const
267  {
268  writer.WriteBool(loc);
269  writer.WriteString(sql);
270  writer.WriteString(type);
271  writer.WriteInt32(pageSize);
272 
273  writer.WriteInt32(static_cast<int32_t>(args.size()));
274 
275  std::vector<impl::cache::query::QueryArgumentBase*>::const_iterator it;
276 
277  for (it = args.begin(); it != args.end(); ++it)
278  (*it)->Write(writer);
279 
280  writer.WriteBool(distributedJoins);
281  writer.WriteInt32(0); // Timeout, ms
282  writer.WriteBool(false); // ReplicatedOnly
283  }
284 
285  private:
287  std::string type;
288 
290  std::string sql;
291 
293  int32_t pageSize;
294 
296  bool loc;
297 
299  bool distributedJoins;
300 
302  std::vector<impl::cache::query::QueryArgumentBase*> args;
303  };
304  }
305  }
306 }
307 
308 #endif //_IGNITE_CACHE_QUERY_QUERY_SQL
bool IsLocal() const
Get local flag.
Definition: query_sql.h:196
void Write(binary::BinaryRawWriter &writer) const
Write query info to the stream.
Definition: query_sql.h:266
Declares ignite::binary::BinaryRawWriter class.
void SetDistributedJoins(bool enabled)
Specify if distributed joins are enabled for this query.
Definition: query_sql.h:229
void WriteInt32(int32_t val)
Write 32-byte signed integer.
Definition: binary_raw_writer.cpp:72
bool IsDistributedJoins() const
Check if distributed joins are enabled for this query.
Definition: query_sql.h:216
const std::string & GetType() const
Get type name.
Definition: query_sql.h:136
SqlQuery & operator=(const SqlQuery &other)
Assignment operator.
Definition: query_sql.h:90
void ClearArguments()
Remove all added arguments.
Definition: query_sql.h:252
Sql query.
Definition: query_sql.h:44
const std::string & GetSql() const
Get SQL string.
Definition: query_sql.h:156
void WriteString(const char *val)
Write string.
Definition: binary_raw_writer.cpp:152
void SetPageSize(int32_t pageSize)
Set page size.
Definition: query_sql.h:186
void SetLocal(bool loc)
Set local flag.
Definition: query_sql.h:206
Binary raw writer.
Definition: binary_raw_writer.h:55
void SetSql(const std::string &sql)
Set SQL string.
Definition: query_sql.h:166
void SetType(const std::string &type)
Set type name.
Definition: query_sql.h:146
void AddArgument(const T &arg)
Add argument.
Definition: query_sql.h:244
void WriteBool(bool val)
Write bool.
Definition: binary_raw_writer.cpp:42
void Swap(SqlQuery &other)
Efficiently swaps contents with another SqlQuery instance.
Definition: query_sql.h:118
SqlQuery(const SqlQuery &other)
Copy constructor.
Definition: query_sql.h:69
~SqlQuery()
Destructor.
Definition: query_sql.h:105
Apache Ignite API.
Definition: cache.h:48
SqlQuery(const std::string &type, const std::string &sql)
Constructor.
Definition: query_sql.h:53
int32_t GetPageSize() const
Get page size.
Definition: query_sql.h:176