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         std::string str = tableName;
24         predicates_ = std::make_shared<NativeRdb::RdbPredicates>(str);
25     }
26 
RdbPredicatesImpl(std::shared_ptr<NativeRdb::RdbPredicates> predicates)27     RdbPredicatesImpl::RdbPredicatesImpl(std::shared_ptr<NativeRdb::RdbPredicates> predicates)
28     {
29         predicates_ = predicates;
30     }
31 
GetClassType()32     OHOS::FFI::RuntimeType* RdbPredicatesImpl::GetClassType()
33     {
34         static OHOS::FFI::RuntimeType runtimeType =
35             OHOS::FFI::RuntimeType::Create<OHOS::FFI::FFIData>("RdbPredicatesImpl");
36         return &runtimeType;
37     }
38 
GetPredicates()39     std::shared_ptr<NativeRdb::RdbPredicates> RdbPredicatesImpl::GetPredicates()
40     {
41         return predicates_;
42     }
43 
InDevices(const char ** devicesArray,int64_t devicesSize)44     void RdbPredicatesImpl::InDevices(const char** devicesArray, int64_t devicesSize)
45     {
46         std::vector<std::string> devices;
47         for (int64_t i = 0; i < devicesSize; i++) {
48             devices.push_back(devicesArray[i]);
49         }
50         predicates_->InDevices(devices);
51     }
52 
InAllDevices()53     void RdbPredicatesImpl::InAllDevices()
54     {
55         predicates_->InAllDevices();
56     }
57 
BeginWrap()58     void RdbPredicatesImpl::BeginWrap()
59     {
60         predicates_->BeginWrap();
61     }
62 
EndWrap()63     void RdbPredicatesImpl::EndWrap()
64     {
65         predicates_->EndWrap();
66     }
67 
Or()68     void RdbPredicatesImpl::Or()
69     {
70         predicates_->Or();
71     }
72 
And()73     void RdbPredicatesImpl::And()
74     {
75         predicates_->And();
76     }
77 
Contains(const char * field,const char * value)78     void RdbPredicatesImpl::Contains(const char* field, const char* value)
79     {
80         std::string cfield = field;
81         std::string cvalue = value;
82         predicates_->Contains(cfield, cvalue);
83     }
84 
BeginsWith(const char * field,const char * value)85     void RdbPredicatesImpl::BeginsWith(const char* field, const char* value)
86     {
87         std::string cfield = field;
88         std::string cvalue = value;
89         predicates_->BeginsWith(cfield, cvalue);
90     }
91 
EndsWith(const char * field,const char * value)92     void RdbPredicatesImpl::EndsWith(const char* field, const char* value)
93     {
94         std::string cfield = field;
95         std::string cvalue = value;
96         predicates_->EndsWith(cfield, cvalue);
97     }
98 
IsNull(const char * field)99     void RdbPredicatesImpl::IsNull(const char* field)
100     {
101         std::string cfield = field;
102         predicates_->IsNull(cfield);
103     }
104 
IsNotNull(const char * field)105     void RdbPredicatesImpl::IsNotNull(const char* field)
106     {
107         std::string cfield = field;
108         predicates_->IsNotNull(cfield);
109     }
110 
Like(const char * field,const char * value)111     void RdbPredicatesImpl::Like(const char* field, const char* value)
112     {
113         std::string cfield = field;
114         std::string cvalue = value;
115         predicates_->Like(cfield, cvalue);
116     }
117 
Glob(const char * field,const char * value)118     void RdbPredicatesImpl::Glob(const char* field, const char* value)
119     {
120         std::string cfield = field;
121         std::string cvalue = value;
122         predicates_->Glob(cfield, cvalue);
123     }
124 
OrderByAsc(const char * field)125     void RdbPredicatesImpl::OrderByAsc(const char* field)
126     {
127         std::string cfield = field;
128         predicates_->OrderByAsc(cfield);
129     }
130 
OrderByDesc(const char * field)131     void RdbPredicatesImpl::OrderByDesc(const char* field)
132     {
133         std::string cfield = field;
134         predicates_->OrderByDesc(cfield);
135     }
136 
Distinct()137     void RdbPredicatesImpl::Distinct()
138     {
139         predicates_->Distinct();
140     }
141 
LimitAs(int32_t value)142     void RdbPredicatesImpl::LimitAs(int32_t value)
143     {
144         predicates_->Limit(value);
145     }
146 
OffsetAs(int32_t rowOffset)147     void RdbPredicatesImpl::OffsetAs(int32_t rowOffset)
148     {
149         predicates_->Offset(rowOffset);
150     }
151 
GroupBy(const char ** fieldsArray,int64_t fieldsSize)152     void RdbPredicatesImpl::GroupBy(const char** fieldsArray, int64_t fieldsSize)
153     {
154         std::vector<std::string> fields;
155         for (int64_t i = 0; i < fieldsSize; i++) {
156             fields.push_back(fieldsArray[i]);
157         }
158         predicates_->GroupBy(fields);
159     }
160 
IndexedBy(const char * field)161     void RdbPredicatesImpl::IndexedBy(const char* field)
162     {
163         std::string cfield = field;
164         predicates_->IndexedBy(cfield);
165     }
166 
LessThanOrEqualTo(const char * field,ValueType value)167     void RdbPredicatesImpl::LessThanOrEqualTo(const char* field, ValueType value)
168     {
169         std::string cfield = field;
170         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
171         predicates_->LessThanOrEqualTo(cfield, valueObject);
172     }
173 
EqualTo(const char * field,ValueType value)174     void RdbPredicatesImpl::EqualTo(const char* field, ValueType value)
175     {
176         std::string cfield = field;
177         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
178         predicates_->EqualTo(cfield, valueObject);
179     }
180 
GreaterThanOrEqualTo(const char * field,ValueType value)181     void RdbPredicatesImpl::GreaterThanOrEqualTo(const char* field, ValueType value)
182     {
183         std::string cfield = field;
184         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
185         predicates_->GreaterThanOrEqualTo(cfield, valueObject);
186     }
187 
GreaterThan(const char * field,ValueType value)188     void RdbPredicatesImpl::GreaterThan(const char* field, ValueType value)
189     {
190         std::string cfield = field;
191         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
192         predicates_->GreaterThan(cfield, valueObject);
193     }
194 
NotBetween(const char * field,ValueType lowValue,ValueType highValue)195     void RdbPredicatesImpl::NotBetween(const char* field, ValueType lowValue, ValueType highValue)
196     {
197         std::string cfield = field;
198         NativeRdb::ValueObject lowValueObject = ValueTypeToValueObject(lowValue);
199         NativeRdb::ValueObject highValueObject = ValueTypeToValueObject(highValue);
200         predicates_->NotBetween(cfield, lowValueObject, highValueObject);
201     }
202 
Between(const char * field,ValueType lowValue,ValueType highValue)203     void RdbPredicatesImpl::Between(const char* field, ValueType lowValue, ValueType highValue)
204     {
205         std::string cfield = field;
206         NativeRdb::ValueObject lowValueObject = ValueTypeToValueObject(lowValue);
207         NativeRdb::ValueObject highValueObject = ValueTypeToValueObject(highValue);
208         predicates_->Between(cfield, lowValueObject, highValueObject);
209     }
210 
LessThan(const char * field,ValueType value)211     void RdbPredicatesImpl::LessThan(const char* field, ValueType value)
212     {
213         std::string cfield = field;
214         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
215         predicates_->LessThan(cfield, valueObject);
216     }
217 
In(const char * field,ValueType * values,int64_t valuesSize)218     void RdbPredicatesImpl::In(const char* field, ValueType* values, int64_t valuesSize)
219     {
220         std::string cfield = field;
221         std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>();
222         for (int64_t i = 0; i < valuesSize; i++) {
223             valueObjects.push_back(ValueTypeToValueObject(values[i]));
224         }
225         predicates_->In(cfield, valueObjects);
226     }
227 
NotIn(const char * field,ValueType * values,int64_t valuesSize)228     void RdbPredicatesImpl::NotIn(const char* field, ValueType* values, int64_t valuesSize)
229     {
230         std::string cfield = field;
231         std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>();
232         for (int64_t i = 0; i < valuesSize; i++) {
233             valueObjects.push_back(ValueTypeToValueObject(values[i]));
234         }
235         predicates_->NotIn(cfield, valueObjects);
236     }
237 
NotEqualTo(const char * field,ValueType value)238     void RdbPredicatesImpl::NotEqualTo(const char* field, ValueType value)
239     {
240         std::string cfield = field;
241         NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value);
242         predicates_->NotEqualTo(cfield, valueObject);
243     }
244 }
245 }