• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef DATASHARE_PREDICATES_H
17 #define DATASHARE_PREDICATES_H
18 
19 #include <string>
20 
21 #include "datashare_abs_predicates.h"
22 #include "datashare_errno.h"
23 #include "datashare_predicates_object.h"
24 #include "datashare_predicates_objects.h"
25 
26 namespace OHOS {
27 namespace DataShare {
28 class DataSharePredicates : public DataShareAbsPredicates {
29 public:
DataSharePredicates()30     DataSharePredicates()
31     {
32     }
DataSharePredicates(const std::list<OperationItem> & operList)33     explicit DataSharePredicates(const std::list<OperationItem> &operList) : operationList_(operList)
34     {
35     }
~DataSharePredicates()36     ~DataSharePredicates()
37     {
38     }
EqualTo(const std::string & field,const DataSharePredicatesObject & value)39     DataSharePredicates *EqualTo(const std::string &field, const DataSharePredicatesObject &value)
40     {
41         SetOperationList(EQUAL_TO, field, value);
42         return this;
43     }
NotEqualTo(const std::string & field,const DataSharePredicatesObject & value)44     DataSharePredicates *NotEqualTo(const std::string &field, const DataSharePredicatesObject &value)
45     {
46         SetOperationList(NOT_EQUAL_TO, field, value);
47         return this;
48     }
GreaterThan(const std::string & field,const DataSharePredicatesObject & value)49     DataSharePredicates *GreaterThan(const std::string &field, const DataSharePredicatesObject &value)
50     {
51         SetOperationList(GREATER_THAN, field, value);
52         return this;
53     }
LessThan(const std::string & field,const DataSharePredicatesObject & value)54     DataSharePredicates *LessThan(const std::string &field, const DataSharePredicatesObject &value)
55     {
56         SetOperationList(LESS_THAN, field, value);
57         return this;
58     }
GreaterThanOrEqualTo(const std::string & field,const DataSharePredicatesObject & value)59     DataSharePredicates *GreaterThanOrEqualTo(const std::string &field, const DataSharePredicatesObject &value)
60     {
61         SetOperationList(GREATER_THAN_OR_EQUAL_TO, field, value);
62         return this;
63     }
LessThanOrEqualTo(const std::string & field,const DataSharePredicatesObject & value)64     DataSharePredicates *LessThanOrEqualTo(const std::string &field, const DataSharePredicatesObject &value)
65     {
66         SetOperationList(LESS_THAN_OR_EQUAL_TO, field, value);
67         return this;
68     }
In(const std::string & field,const DataSharePredicatesObjects & values)69     DataSharePredicates *In(const std::string &field, const DataSharePredicatesObjects &values)
70     {
71         SetOperationList(SQL_IN, field, values);
72         return this;
73     }
NotIn(const std::string & field,const DataSharePredicatesObjects & values)74     DataSharePredicates *NotIn(const std::string &field, const DataSharePredicatesObjects &values)
75     {
76         SetOperationList(NOT_IN, field, values);
77         return this;
78     }
BeginWrap()79     DataSharePredicates *BeginWrap()
80     {
81         SetOperationList(BEGIN_WARP);
82         return this;
83     }
EndWrap()84     DataSharePredicates *EndWrap()
85     {
86         SetOperationList(END_WARP);
87         return this;
88     }
Or()89     DataSharePredicates *Or()
90     {
91         SetOperationList(OR);
92         return this;
93     }
And()94     DataSharePredicates *And()
95     {
96         SetOperationList(AND);
97         return this;
98     }
Contains(const std::string & field,const std::string & value)99     DataSharePredicates *Contains(const std::string &field, const std::string &value)
100     {
101         SetOperationList(CONTAINS, field, value);
102         return this;
103     }
BeginsWith(const std::string & field,const std::string & value)104     DataSharePredicates *BeginsWith(const std::string &field, const std::string &value)
105     {
106         SetOperationList(BEGIN_WITH, field, value);
107         return this;
108     }
EndsWith(const std::string & field,const std::string & value)109     DataSharePredicates *EndsWith(const std::string &field, const std::string &value)
110     {
111         SetOperationList(END_WITH, field, value);
112         return this;
113     }
IsNull(const std::string & field)114     DataSharePredicates *IsNull(const std::string &field)
115     {
116         SetOperationList(IS_NULL, field);
117         return this;
118     }
IsNotNull(const std::string & field)119     DataSharePredicates *IsNotNull(const std::string &field)
120     {
121         SetOperationList(IS_NOT_NULL, field);
122         return this;
123     }
Like(const std::string & field,const std::string & value)124     DataSharePredicates *Like(const std::string &field, const std::string &value)
125     {
126         SetOperationList(LIKE, field, value);
127         return this;
128     }
Unlike(const std::string & field,const std::string & value)129     DataSharePredicates *Unlike(const std::string &field, const std::string &value)
130     {
131         SetOperationList(UNLIKE, field, value);
132         return this;
133     }
Glob(const std::string & field,const std::string & value)134     DataSharePredicates *Glob(const std::string &field, const std::string &value)
135     {
136         SetOperationList(GLOB, field, value);
137         return this;
138     }
Between(const std::string & field,const std::string & low,const std::string & high)139     DataSharePredicates *Between(const std::string &field, const std::string &low, const std::string &high)
140     {
141         SetOperationList(BETWEEN, field, low, high);
142         return this;
143     }
NotBetween(const std::string & field,const std::string & low,const std::string & high)144     DataSharePredicates *NotBetween(const std::string &field, const std::string &low, const std::string &high)
145     {
146         SetOperationList(NOTBETWEEN, field, low, high);
147         return this;
148     }
OrderByAsc(const std::string & field)149     DataSharePredicates *OrderByAsc(const std::string &field)
150     {
151         SetOperationList(ORDER_BY_ASC, field);
152         return this;
153     }
OrderByDesc(const std::string & field)154     DataSharePredicates *OrderByDesc(const std::string &field)
155     {
156         SetOperationList(ORDER_BY_DESC, field);
157         return this;
158     }
Distinct()159     DataSharePredicates *Distinct()
160     {
161         SetOperationList(DISTINCT);
162         return this;
163     }
Limit(const int number,const int offset)164     DataSharePredicates *Limit(const int number, const int offset)
165     {
166         SetOperationList(LIMIT, number, offset);
167         return this;
168     }
GroupBy(const std::vector<std::string> & fields)169     DataSharePredicates *GroupBy(const std::vector<std::string> &fields)
170     {
171         SetOperationList(GROUP_BY, fields);
172         return this;
173     }
IndexedBy(const std::string & indexName)174     DataSharePredicates *IndexedBy(const std::string &indexName)
175     {
176         SetOperationList(INDEXED_BY, indexName);
177         return this;
178     }
KeyPrefix(const std::string & prefix)179     DataSharePredicates *KeyPrefix(const std::string &prefix)
180     {
181         SetOperationList(KEY_PREFIX, prefix);
182         return this;
183     }
InKeys(const std::vector<std::string> & keys)184     DataSharePredicates *InKeys(const std::vector<std::string> &keys)
185     {
186         SetOperationList(IN_KEY, keys);
187         return this;
188     }
GetOperationList()189     const std::list<OperationItem> &GetOperationList() const
190     {
191         return operationList_;
192     }
GetWhereClause()193     std::string GetWhereClause() const
194     {
195         return whereClause_;
196     }
SetWhereClause(const std::string & whereClause)197     int SetWhereClause(const std::string &whereClause)
198     {
199         if ((settingMode_ != PREDICATES_METHOD) && (!whereClause.empty())) {
200             this->whereClause_ = whereClause;
201             settingMode_ = QUERY_LANGUAGE;
202             return E_OK;
203         }
204         return E_ERROR;
205     }
GetWhereArgs()206     std::vector<std::string> GetWhereArgs() const
207     {
208         return whereArgs_;
209     }
SetWhereArgs(const std::vector<std::string> & whereArgs)210     int SetWhereArgs(const std::vector<std::string> &whereArgs)
211     {
212         if ((settingMode_ != PREDICATES_METHOD) && (!whereArgs.empty())) {
213             if (!whereArgs.empty()) {
214                 this->whereArgs_ = whereArgs;
215                 settingMode_ = QUERY_LANGUAGE;
216                 return E_OK;
217             }
218         }
219         return E_ERROR;
220     }
GetOrder()221     std::string GetOrder() const
222     {
223         return order_;
224     }
SetOrder(const std::string & order)225     int SetOrder(const std::string &order)
226     {
227         if ((settingMode_ != PREDICATES_METHOD) && (!order.empty())) {
228             this->order_ = order;
229             settingMode_ = QUERY_LANGUAGE;
230             return E_OK;
231         }
232         return E_ERROR;
233     }
GetSettingMode()234     SettingMode GetSettingMode() const
235     {
236         return settingMode_;
237     }
SetSettingMode(const SettingMode & settingMode)238     void SetSettingMode(const SettingMode &settingMode)
239     {
240         settingMode_ = settingMode;
241     }
242 
243 private:
SetOperationList(OperationType operationType,const DataSharePredicatesObjects & param)244     void SetOperationList(OperationType operationType, const DataSharePredicatesObjects &param)
245     {
246         OperationItem operationItem {};
247         operationItem.operation = operationType;
248         operationItem.multiParams.push_back(param);
249         operationList_.push_back(operationItem);
250         if (settingMode_ != PREDICATES_METHOD) {
251             ClearQueryLanguage();
252             settingMode_ = PREDICATES_METHOD;
253         }
254     }
SetOperationList(OperationType operationType,const DataSharePredicatesObject & param1,const DataSharePredicatesObjects & param2)255     void SetOperationList(
256         OperationType operationType, const DataSharePredicatesObject &param1, const DataSharePredicatesObjects &param2)
257     {
258         OperationItem operationItem {};
259         operationItem.operation = operationType;
260         operationItem.singleParams.push_back(param1);
261         operationItem.multiParams.push_back(param2);
262         operationList_.push_back(operationItem);
263         if (settingMode_ != PREDICATES_METHOD) {
264             ClearQueryLanguage();
265             settingMode_ = PREDICATES_METHOD;
266         }
267     }
268     void SetOperationList(OperationType operationType, const DataSharePredicatesObject &para1 = {},
269         const DataSharePredicatesObject &para2 = {}, const DataSharePredicatesObject &para3 = {})
270     {
271         OperationItem operationItem {};
272         operationItem.operation = operationType;
273         operationItem.singleParams.push_back(para1);
274         operationItem.singleParams.push_back(para2);
275         operationItem.singleParams.push_back(para3);
276         operationList_.push_back(operationItem);
277         if (settingMode_ != PREDICATES_METHOD) {
278             ClearQueryLanguage();
279             settingMode_ = PREDICATES_METHOD;
280         }
281     }
ClearQueryLanguage()282     void ClearQueryLanguage()
283     {
284         whereClause_ = "";
285         whereArgs_ = {};
286         order_ = "";
287     }
288     std::list<OperationItem> operationList_;
289     std::string whereClause_;
290     std::vector<std::string> whereArgs_;
291     std::string order_;
292     SettingMode settingMode_ = {};
293 };
294 } // namespace DataShare
295 } // namespace OHOS
296 #endif