NEC mBaaS Embedded SDK  6.2.0
 全て クラス ネームスペース ファイル 関数 変数 列挙型 列挙型の値
nb_query.h
説明を見る。
1 /*
2  * COPYRIGHT (C) 2017 NEC CORPORATION
3  *
4  * ALL RIGHTS RESERVED BY NEC CORPORATION, THIS PROGRAM
5  * MUST BE USED SOLELY FOR THE PURPOSE FOR WHICH IT WAS
6  * FURNISHED BY NEC CORPORATION, NO PART OF THIS PROGRAM
7  * MAY BE REPRODUCED OR DISCLOSED TO OTHERS, IN ANY FORM
8  * WITHOUT THE PRIOR WRITTEN PERMISSION OF NEC CORPORATION.
9  *
10  * NEC CONFIDENTIAL AND PROPRIETARY
11  */
12 
13 #ifndef NECBAAS_NBQUERY_H
14 #define NECBAAS_NBQUERY_H
15 
16 #include <string>
17 #include <vector>
18 #include <map>
19 #include <typeinfo>
20 #include <json/json.h>
21 #include "necbaas/nb_json_object.h"
22 #include "necbaas/nb_json_array.h"
23 
24 namespace necbaas {
25 
29 enum class NbReadPreference {
30  PRIMARY,
32 };
33 
41 class NbQuery {
42  public:
46  NbQuery();
47 
51  ~NbQuery();
52 
62  template <typename T>
63  NbQuery &EqualTo(const std::string &key, T value) {
64  if (!key.empty()) {
65  if (typeid(T) == typeid(NbJsonObject)) {
66  return AddSimpleOp("$eq", key, value);
67  } else {
68  return AddSimpleOp("", key, value);
69  }
70  }
71  return *this;
72  }
73 
83  template <typename T>
84  NbQuery &LessThan(const std::string &key, T value) {
85  return AddSimpleOp("$lt", key, value);
86  }
87 
97  template <typename T>
98  NbQuery &LessThanOrEqual(const std::string &key, T value) {
99  return AddSimpleOp("$lte", key, value);
100  }
101 
111  template <typename T>
112  NbQuery &GreaterThan(const std::string &key, T value) {
113  return AddSimpleOp("$gt", key, value);
114  }
115 
125  template <typename T>
126  NbQuery &GreaterThanOrEqual(const std::string &key, T value) {
127  return AddSimpleOp("$gte", key, value);
128  }
129 
139  template <typename T>
140  NbQuery &NotEquals(const std::string &key, T value) {
141  return AddSimpleOp("$ne", key, value);
142  }
143 
151  NbQuery &In(const std::string &key, const NbJsonArray &array);
152 
160  NbQuery &All(const std::string &key, const NbJsonArray &array);
161 
175  NbQuery &Regex(const std::string &key, const std::string &regexp, const std::string &options = "");
176 
183  NbQuery &Exists(const std::string &key);
184 
191  NbQuery &NotExists(const std::string &key);
192 
199  NbQuery &Not(const std::string &key);
200 
208  NbQuery &Or(const std::vector<NbQuery> queries);
209 
217  NbQuery &And(const std::vector<NbQuery> queries);
218 
231  NbQuery &OrderBy(const std::vector<std::string> &order);
232 
239  NbQuery &Skip(int skip);
240 
247  NbQuery &Limit(int limit);
248 
254  NbQuery &DeleteMark(bool delete_mark);
255 
279  NbQuery &Projection(const std::map<std::string, bool> &projection);
280 
286  NbQuery &ReadPreference(NbReadPreference read_preference);
287 
294  NbQuery &Timeout(int timeout);
295 
302  std::string GetConditionsString() const;
303 
310  std::string GetOrderString() const;
311 
318  std::string GetSkipString() const;
319 
326  std::string GetLimitString() const;
327 
334  std::string GetDeleteMarkString() const;
335 
342  std::string GetProjectionString() const;
343 
350  std::string GetReadPreferenceString() const;
351 
358  std::string GetTimeoutString() const;
359 
366  const Json::Value &GetConditions() const;
367 
368  private:
369  const static int kLimitDefault;
371  Json::Value conditions_;
372  std::vector<std::string> order_{};
373  int skip_{0};
374  int limit_{kLimitDefault};
375  bool delete_mark_{false};
376  std::map<std::string, bool> projection_{};
377  NbReadPreference read_preference_{NbReadPreference::PRIMARY};
378  int timeout_{0};
387  template <typename T>
388  NbQuery &AddSimpleOpPrimitive(const std::string &op, const std::string &key, T value) {
389  if (!key.empty()) {
390  if (op.empty()) {
391  conditions_[key] = value;
392  } else {
393  Json::Value json;
394  json[op] = value;
395  conditions_[key] = json;
396  }
397  }
398  return *this;
399  }
400 
408  template <typename T>
409  NbQuery &AddSimpleOpJson(const std::string &op, const std::string &key, T value) {
410  if (!key.empty()) {
411  if (op.empty()) {
412  conditions_[key] = value.GetSubstitutableValue();
413  } else {
414  Json::Value json;
415  json[op] = value.GetSubstitutableValue();
416  conditions_[key] = json;
417  }
418  }
419  return *this;
420  }
421 
429  NbQuery &AddSimpleOp(const std::string &op, const std::string &key, int value);
430 
438  NbQuery &AddSimpleOp(const std::string &op, const std::string &key, int64_t value);
439 
447  NbQuery &AddSimpleOp(const std::string &op, const std::string &key, double value);
448 
456  NbQuery &AddSimpleOp(const std::string &op, const std::string &key, bool value);
457 
465  NbQuery &AddSimpleOp(const std::string &op, const std::string &key, const std::string &value);
466 
474  NbQuery &AddSimpleOp(const std::string &op, const std::string &key, const NbJsonObject &value);
475 
483  NbQuery &AddSimpleOp(const std::string &op, const std::string &key, const NbJsonArray &value);
484 
491  NbQuery &ConcatQueries(const std::string &op, std::vector<NbQuery> queries);
492 };
493 } // namespace necbaas
494 #endif // NECBAAS_NBQUERY_H
std::string GetDeleteMarkString() const
[内部処理用]
オブジェクト検索クラス.
Definition: nb_query.h:41
std::string GetTimeoutString() const
[内部処理用]
NbQuery & Regex(const std::string &key, const std::string &regexp, const std::string &options="")
正規表現一致条件を追加する.
const Json::Value & GetConditions() const
[内部処理用]
NbQuery & DeleteMark(bool delete_mark)
削除マークされたデータを読み込むフラグを設定する.
NbQuery & Skip(int skip)
Skip値を設定する.
std::string GetSkipString() const
[内部処理用]
NbQuery & GreaterThanOrEqual(const std::string &key, T value)
大なりまたは等しいを追加する.
Definition: nb_query.h:126
NbQuery & Exists(const std::string &key)
フィールドの存在条件を追加する.
NbReadPreference
参照する DB の指定
Definition: nb_query.h:29
NbQuery & Projection(const std::map< std::string, bool > &projection)
プロジェクションを設定する.
NbQuery & NotEquals(const std::string &key, T value)
不一致条件を追加する.
Definition: nb_query.h:140
NbQuery & Not(const std::string &key)
指定したキーの条件を反転(not)する.
NbQuery & All(const std::string &key, const NbJsonArray &array)
array に指定された値がすべて合致する条件を追加する.
NbQuery & LessThan(const std::string &key, T value)
小なり条件を追加する.
Definition: nb_query.h:84
NbQuery & And(const std::vector< NbQuery > queries)
AND条件を生成する.
NbQuery & ReadPreference(NbReadPreference read_preference)
参照するDBの指定を設定する.
Jsonオブジェクト.
Definition: nb_json_object.h:34
NbQuery & NotExists(const std::string &key)
フィールドの非存在条件を追加する.
~NbQuery()
デストラクタ.
NbQuery & Or(const std::vector< NbQuery > queries)
OR条件を生成する.
NbQuery & Limit(int limit)
Limit値を設定する.
NbQuery & EqualTo(const std::string &key, T value)
一致条件を追加する.
Definition: nb_query.h:63
NbQuery & In(const std::string &key, const NbJsonArray &array)
array に指定された値のいずれかと一致する条件を追加する.
NbQuery()
コンストラクタ.
std::string GetProjectionString() const
[内部処理用]
std::string GetLimitString() const
[内部処理用]
std::string GetOrderString() const
[内部処理用]
NbQuery & GreaterThan(const std::string &key, T value)
大なり条件を追加する.
Definition: nb_query.h:112
std::string GetConditionsString() const
[内部処理用]
Json配列.
Definition: nb_json_array.h:37
NbQuery & Timeout(int timeout)
クエリタイムアウト(ミリ秒)設定する.
NbQuery & OrderBy(const std::vector< std::string > &order)
ソート条件を設定する.
NbQuery & LessThanOrEqual(const std::string &key, T value)
小なりまたは等しいを追加する.
Definition: nb_query.h:98
std::string GetReadPreferenceString() const
[内部処理用]