• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 #include "relational_store_impl_rdbpredicatesproxy.h"
17 #include "relational_store_utils.h"
18 
19 namespace OHOS {
20 namespace Relational {
RdbPredicatesImpl(const char * tableName)21     RdbPredicatesImpl::RdbPredicatesImpl(const char* tableName)
22     {
23         if (tableName == nullptr) {
24             return;
25         }
26         std::string str = tableName;
27         predicates_ = std::make_shared<NativeRdb::RdbPredicates>(str);
28     }
29 
RdbPredicatesImpl(std::shared_ptr<NativeRdb::RdbPredicates> predicates)30     RdbPredicatesImpl::RdbPredicatesImpl(std::shared_ptr<NativeRdb::RdbPredicates> predicates)
31     {
32         predicates_ = predicates;
33     }
34 
GetClassType()35     OHOS::FFI::RuntimeType* RdbPredicatesImpl::GetClassType()
36     {
37         static OHOS::FFI::RuntimeType runtimeType =
38             OHOS::FFI::RuntimeType::Create<OHOS::FFI::FFIData>("RdbPredicatesImpl");
39         return &runtimeType;
40     }
41 
GetPredicates()42     std::shared_ptr<NativeRdb::RdbPredicates> RdbPredicatesImpl::GetPredicates()
43     {
44         return predicates_;
45     }
46 
InDevices(const char ** devicesArray,int64_t devicesSize)47     void RdbPredicatesImpl::InDevices(const char** devicesArray, int64_t devicesSize)
48     {
49         std::vector<std::string> devices;
50         for (int64_t i = 0; i < devicesSize; i++) {
51             devices.push_back(devicesArray[i]);
52         }
53         if (predicates_ == nullptr) {
54             return;
55         }
56         predicates_->InDevices(devices);
57     }
58 
InAllDevices()59     void RdbPredicatesImpl::InAllDevices()
60     {
61         if (predicates_ == nullptr) {
62             return;
63         }
64         predicates_->InAllDevices();
65     }
66 
BeginWrap()67     void RdbPredicatesImpl::BeginWrap()
68     {
69         if (predicates_ == nullptr) {
70             return;
71         }
72         predicates_->BeginWrap();
73     }
74 
EndWrap()75     void RdbPredicatesImpl::EndWrap()
76     {
77         if (predicates_ == nullptr) {
78             return;
79         }
80         predicates_->EndWrap();
81     }
82 
Or()83     void RdbPredicatesImpl::Or()
84     {
85         if (predicates_ == nullptr) {
86             return;
87         }
88         predicates_->Or();
89     }
90 
And()91     void RdbPredicatesImpl::And()
92     {
93         if (predicates_ == nullptr) {
94             return;
95         }
96         predicates_->And();
97     }
98 
Contains(const char * field,const char * value)99     void RdbPredicatesImpl::Contains(const char* field, const char* value)
100     {
101         if (field == nullptr || value == nullptr || predicates_ == nullptr) {
102             return;
103         }
104         std::string cfield = field;
105         std::string cvalue = value;
106         predicates_->Contains(cfield, cvalue);
107     }
108 
BeginsWith(const char * field,const char * value)109     void RdbPredicatesImpl::BeginsWith(const char* field, const char* value)
110     {
111         if (field == nullptr || value == nullptr || predicates_ == nullptr) {
112             return;
113         }
114         std::string cfield = field;
115         std::string cvalue = value;
116         predicates_->BeginsWith(cfield, cvalue);
117     }
118 
EndsWith(const char * field,const char * value)119     void RdbPredicatesImpl::EndsWith(const char* field, const char* value)
120     {
121         if (field == nullptr || value == nullptr || predicates_ == nullptr) {
122             return;
123         }
124         std::string cfield = field;
125         std::string cvalue = value;
126         predicates_->EndsWith(cfield, cvalue);
127     }
128 
IsNull(const char * field)129     void RdbPredicatesImpl::IsNull(const char* field)
130     {
131         if (field == nullptr || predicates_ == nullptr) {
132             return;
133         }
134         std::string cfield = field;
135         predicates_->IsNull(cfield);
136     }
137 
IsNotNull(const char * field)138     void RdbPredicatesImpl::IsNotNull(const char* field)
139     {
140         if (field == nullptr || predicates_ == nullptr) {
141             return;
142         }
143         std::string cfield = field;
144         predicates_->IsNotNull(cfield);
145     }
146 
Like(const char * field,const char * value)147     void RdbPredicatesImpl::Like(const char* field, const char* value)
148     {
149         if (field == nullptr || value == nullptr || predicates_ == nullptr) {
150             return;
151         }
152         std::string cfield = field;
153         std::string cvalue = value;
154         predicates_->Like(cfield, cvalue);
155     }
156 
Glob(const char * field,const char * value)157     void RdbPredicatesImpl::Glob(const char* field, const char* value)
158     {
159         if (field == nullptr || value == nullptr || predicates_ == nullptr) {
160             return;
161         }
162         std::string cfield = field;
163         std::string cvalue = value;
164         predicates_->Glob(cfield, cvalue);
165     }
166 
OrderByAsc(const char * field)167     void RdbPredicatesImpl::OrderByAsc(const char* field)
168     {
169         if (field == nullptr || predicates_ == nullptr) {
170             return;
171         }
172         std::string cfield = field;
173         predicates_->OrderByAsc(cfield);
174     }
175 
OrderByDesc(const char * field)176     void RdbPredicatesImpl::OrderByDesc(const char* field)
177     {
178         if (field == nullptr || predicates_ == nullptr) {
179             return;
180         }
181         std::string cfield = field;
182         predicates_->OrderByDesc(cfield);
183     }
184 
Distinct()185     void RdbPredicatesImpl::Distinct()
186     {
187         if (predicates_ == nullptr) {
188             return;
189         }
190         predicates_->Distinct();
191     }
192 
LimitAs(int32_t value)193     void RdbPredicatesImpl::LimitAs(int32_t value)
194     {
195         if (predicates_ == nullptr) {
196             return;
197         }
198         predicates_->Limit(value);
199     }
200 
OffsetAs(int32_t rowOffset)201     void RdbPredicatesImpl::OffsetAs(int32_t rowOffset)
202     {
203         if (predicates_ == nullptr) {
204             return;
205         }
206         predicates_->Offset(rowOffset);
207     }
208 
GroupBy(const char ** fieldsArray,int64_t fieldsSize)209     void RdbPredicatesImpl::GroupBy(const char** fieldsArray, int64_t fieldsSize)
210     {
211         if (fieldsArray == nullptr || predicates_ == nullptr) {
212             return;
213         }
214         std::vector<std::string> fields;
215         for (int64_t i = 0; i < fieldsSize; i++) {
216             if (fieldsArray[i] == nullptr) {
217                 return;
218             }
219             fields.push_back(fieldsArray[i]);
220         }
221         predicates_->GroupBy(fields);
222     }
223 
IndexedBy(const char * field)224     void RdbPredicatesImpl::IndexedBy(const char* field)
225     {
226         if (field == nullptr || predicates_ == nullptr) {
227             return;
228         }
229         std::string cfield = field;
230         predicates_->IndexedBy(cfield);
231     }
232 
LessThanOrEqualTo(const char * field,ValueType value)233     void RdbPredicatesImpl::LessThanOrEqualTo(const char* field, ValueType value)
234     {
235         if (field == nullptr || predicates_ == nullptr) {
236             return;
237         }
238         std::string cfield = field;
239         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
240         predicates_->LessThanOrEqualTo(cfield, valueObject);
241     }
242 
LessThanOrEqualToEx(const char * field,const ValueTypeEx * value)243     void RdbPredicatesImpl::LessThanOrEqualToEx(const char* field, const ValueTypeEx *value)
244     {
245         if (field == nullptr || value == nullptr || predicates_ == nullptr) {
246             return;
247         }
248         std::string cfield = field;
249         NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value);
250         predicates_->LessThanOrEqualTo(cfield, valueObject);
251     }
252 
EqualTo(const char * field,ValueType value)253     void RdbPredicatesImpl::EqualTo(const char* field, ValueType value)
254     {
255         if (field == nullptr || predicates_ == nullptr) {
256             return;
257         }
258         std::string cfield = field;
259         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
260         predicates_->EqualTo(cfield, valueObject);
261     }
262 
EqualToEx(const char * field,const ValueTypeEx * value)263     void RdbPredicatesImpl::EqualToEx(const char* field, const ValueTypeEx *value)
264     {
265         if (field == nullptr || predicates_ == nullptr || value == nullptr) {
266             return;
267         }
268         std::string cfield = field;
269         NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value);
270         predicates_->EqualTo(cfield, valueObject);
271     }
272 
GreaterThanOrEqualTo(const char * field,ValueType value)273     void RdbPredicatesImpl::GreaterThanOrEqualTo(const char* field, ValueType value)
274     {
275         if (field == nullptr || predicates_ == nullptr) {
276             return;
277         }
278         std::string cfield = field;
279         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
280         predicates_->GreaterThanOrEqualTo(cfield, valueObject);
281     }
282 
GreaterThanOrEqualToEx(const char * field,const ValueTypeEx * value)283     void RdbPredicatesImpl::GreaterThanOrEqualToEx(const char* field, const ValueTypeEx *value)
284     {
285         if (field == nullptr || predicates_ == nullptr || value == nullptr) {
286             return;
287         }
288         std::string cfield = field;
289         NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value);
290         predicates_->GreaterThanOrEqualTo(cfield, valueObject);
291     }
292 
GreaterThan(const char * field,ValueType value)293     void RdbPredicatesImpl::GreaterThan(const char* field, ValueType value)
294     {
295         if (field == nullptr || predicates_ == nullptr) {
296             return;
297         }
298         std::string cfield = field;
299         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
300         predicates_->GreaterThan(cfield, valueObject);
301     }
302 
GreaterThanEx(const char * field,const ValueTypeEx * value)303     void RdbPredicatesImpl::GreaterThanEx(const char* field, const ValueTypeEx *value)
304     {
305         if (field == nullptr || predicates_ == nullptr || value == nullptr) {
306             return;
307         }
308         std::string cfield = field;
309         NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value);
310         predicates_->GreaterThan(cfield, valueObject);
311     }
312 
NotBetween(const char * field,ValueType lowValue,ValueType highValue)313     void RdbPredicatesImpl::NotBetween(const char* field, ValueType lowValue, ValueType highValue)
314     {
315         if (field == nullptr || predicates_ == nullptr) {
316             return;
317         }
318         std::string cfield = field;
319         NativeRdb::ValueObject lowValueObject = ValueTypeToValueObject(lowValue);
320         NativeRdb::ValueObject highValueObject = ValueTypeToValueObject(highValue);
321         predicates_->NotBetween(cfield, lowValueObject, highValueObject);
322     }
323 
NotBetweenEx(const char * field,const ValueTypeEx * lowValue,const ValueTypeEx * highValue)324     void RdbPredicatesImpl::NotBetweenEx(const char* field, const ValueTypeEx *lowValue, const ValueTypeEx *highValue)
325     {
326         if (field == nullptr || predicates_ == nullptr || lowValue == nullptr || highValue == nullptr) {
327             return;
328         }
329         std::string cfield = field;
330         NativeRdb::ValueObject lowValueObject = ValueTypeExToValueObject(*lowValue);
331         NativeRdb::ValueObject highValueObject = ValueTypeExToValueObject(*highValue);
332         predicates_->NotBetween(cfield, lowValueObject, highValueObject);
333     }
334 
Between(const char * field,ValueType lowValue,ValueType highValue)335     void RdbPredicatesImpl::Between(const char* field, ValueType lowValue, ValueType highValue)
336     {
337         if (field == nullptr || predicates_ == nullptr) {
338             return;
339         }
340         std::string cfield = field;
341         NativeRdb::ValueObject lowValueObject = ValueTypeToValueObject(lowValue);
342         NativeRdb::ValueObject highValueObject = ValueTypeToValueObject(highValue);
343         predicates_->Between(cfield, lowValueObject, highValueObject);
344     }
345 
BetweenEx(const char * field,const ValueTypeEx * lowValue,const ValueTypeEx * highValue)346     void RdbPredicatesImpl::BetweenEx(const char* field, const ValueTypeEx *lowValue, const ValueTypeEx *highValue)
347     {
348         if (field == nullptr || predicates_ == nullptr || lowValue == nullptr || highValue == nullptr) {
349             return;
350         }
351         std::string cfield = field;
352         NativeRdb::ValueObject lowValueObject = ValueTypeExToValueObject(*lowValue);
353         NativeRdb::ValueObject highValueObject = ValueTypeExToValueObject(*highValue);
354         predicates_->Between(cfield, lowValueObject, highValueObject);
355     }
356 
LessThan(const char * field,ValueType value)357     void RdbPredicatesImpl::LessThan(const char* field, ValueType value)
358     {
359         if (field == nullptr || predicates_ == nullptr) {
360             return;
361         }
362         std::string cfield = field;
363         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
364         predicates_->LessThan(cfield, valueObject);
365     }
366 
LessThanEx(const char * field,const ValueTypeEx * value)367     void RdbPredicatesImpl::LessThanEx(const char *field, const ValueTypeEx *value)
368     {
369         if (field == nullptr || predicates_ == nullptr || value == nullptr) {
370             return;
371         }
372         std::string cfield = field;
373         NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value);
374         predicates_->LessThan(cfield, valueObject);
375     }
376 
In(const char * field,ValueType * values,int64_t valuesSize)377     void RdbPredicatesImpl::In(const char* field, ValueType* values, int64_t valuesSize)
378     {
379         if (field == nullptr || predicates_ == nullptr || values == nullptr) {
380             return;
381         }
382         std::string cfield = field;
383         std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>();
384         for (int64_t i = 0; i < valuesSize; i++) {
385             valueObjects.push_back(ValueTypeToValueObject(values[i]));
386         }
387         predicates_->In(cfield, valueObjects);
388     }
389 
InEx(const char * field,ValueTypeEx * values,int64_t valuesSize)390     void RdbPredicatesImpl::InEx(const char* field, ValueTypeEx* values, int64_t valuesSize)
391     {
392         if (field == nullptr || predicates_ == nullptr || values == nullptr) {
393             return;
394         }
395         std::string cfield = field;
396         std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>();
397         for (int64_t i = 0; i < valuesSize; i++) {
398             valueObjects.push_back(ValueTypeExToValueObject(values[i]));
399         }
400         predicates_->In(cfield, valueObjects);
401     }
402 
NotIn(const char * field,ValueType * values,int64_t valuesSize)403     void RdbPredicatesImpl::NotIn(const char* field, ValueType* values, int64_t valuesSize)
404     {
405         if (field == nullptr || predicates_ == nullptr || values == nullptr) {
406             return;
407         }
408         std::string cfield = field;
409         std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>();
410         for (int64_t i = 0; i < valuesSize; i++) {
411             valueObjects.push_back(ValueTypeToValueObject(values[i]));
412         }
413         predicates_->NotIn(cfield, valueObjects);
414     }
415 
NotInEx(const char * field,ValueTypeEx * values,int64_t valuesSize)416     void RdbPredicatesImpl::NotInEx(const char* field, ValueTypeEx* values, int64_t valuesSize)
417     {
418         if (field == nullptr || predicates_ == nullptr || values == nullptr) {
419             return;
420         }
421         std::string cfield = field;
422         std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>();
423         for (int64_t i = 0; i < valuesSize; i++) {
424             valueObjects.push_back(ValueTypeExToValueObject(values[i]));
425         }
426         predicates_->NotIn(cfield, valueObjects);
427     }
428 
NotEqualTo(const char * field,ValueType value)429     void RdbPredicatesImpl::NotEqualTo(const char* field, ValueType value)
430     {
431         if (field == nullptr || predicates_ == nullptr) {
432             return;
433         }
434         std::string cfield = field;
435         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
436         predicates_->NotEqualTo(cfield, valueObject);
437     }
438 
NotEqualToEx(const char * field,const ValueTypeEx * value)439     void RdbPredicatesImpl::NotEqualToEx(const char* field, const ValueTypeEx *value)
440     {
441         if (field == nullptr || predicates_ == nullptr || value == nullptr) {
442             return;
443         }
444         std::string cfield = field;
445         NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value);
446         predicates_->NotEqualTo(cfield, valueObject);
447     }
448 
NotContains(const char * field,const char * value)449     void RdbPredicatesImpl::NotContains(const char* field, const char* value)
450     {
451         if (field == nullptr || predicates_ == nullptr || value == nullptr) {
452             return;
453         }
454         std::string cfield = field;
455         std::string cvalue = value;
456         predicates_->NotContains(cfield, cvalue);
457     }
458 
NotLike(const char * field,const char * value)459     void RdbPredicatesImpl::NotLike(const char* field, const char* value)
460     {
461         if (field == nullptr || predicates_ == nullptr || value == nullptr) {
462             return;
463         }
464         std::string cfield = field;
465         std::string cvalue = value;
466         predicates_->NotLike(field, value);
467     }
468 }
469 }