• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 #include <memory>
16 #define LOG_TAG "DataAbilityPredicatesProxy"
17 #include "napi_data_ability_predicates.h"
18 
19 #include "js_df_manager.h"
20 #include "js_utils.h"
21 #include "logger.h"
22 #include "napi_predicates_utils.h"
23 
24 using namespace OHOS::Rdb;
25 using namespace OHOS::NativeRdb;
26 using namespace OHOS::AppDataMgrJsKit;
27 
28 namespace OHOS {
29 namespace DataAbilityJsKit {
30 static __thread napi_ref constructor_ = nullptr;
31 
Init(napi_env env,napi_value exports)32 void DataAbilityPredicatesProxy::Init(napi_env env, napi_value exports)
33 {
34     LOG_INFO("Init DataAbilityPredicatesProxy");
35     napi_property_descriptor descriptors[] = {
36         DECLARE_NAPI_FUNCTION("equalTo", EqualTo),
37         DECLARE_NAPI_FUNCTION("notEqualTo", NotEqualTo),
38         DECLARE_NAPI_FUNCTION("beginWrap", BeginWrap),
39         DECLARE_NAPI_FUNCTION("endWrap", EndWrap),
40         DECLARE_NAPI_FUNCTION("or", Or),
41         DECLARE_NAPI_FUNCTION("and", And),
42         DECLARE_NAPI_FUNCTION("contains", Contains),
43         DECLARE_NAPI_FUNCTION("beginsWith", BeginsWith),
44         DECLARE_NAPI_FUNCTION("endsWith", EndsWith),
45         DECLARE_NAPI_FUNCTION("isNull", IsNull),
46         DECLARE_NAPI_FUNCTION("isNotNull", IsNotNull),
47         DECLARE_NAPI_FUNCTION("like", Like),
48         DECLARE_NAPI_FUNCTION("glob", Glob),
49         DECLARE_NAPI_FUNCTION("between", Between),
50         DECLARE_NAPI_FUNCTION("notBetween", NotBetween),
51         DECLARE_NAPI_FUNCTION("greaterThan", GreaterThan),
52         DECLARE_NAPI_FUNCTION("lessThan", LessThan),
53         DECLARE_NAPI_FUNCTION("greaterThanOrEqualTo", GreaterThanOrEqualTo),
54         DECLARE_NAPI_FUNCTION("lessThanOrEqualTo", LessThanOrEqualTo),
55         DECLARE_NAPI_FUNCTION("orderByAsc", OrderByAsc),
56         DECLARE_NAPI_FUNCTION("orderByDesc", OrderByDesc),
57         DECLARE_NAPI_FUNCTION("distinct", Distinct),
58         DECLARE_NAPI_FUNCTION("limitAs", Limit),
59         DECLARE_NAPI_FUNCTION("offsetAs", Offset),
60         DECLARE_NAPI_FUNCTION("groupBy", GroupBy),
61         DECLARE_NAPI_FUNCTION("indexedBy", IndexedBy),
62         DECLARE_NAPI_FUNCTION("in", In),
63         DECLARE_NAPI_FUNCTION("notIn", NotIn),
64         DECLARE_NAPI_FUNCTION("clear", Clear),
65         DECLARE_NAPI_FUNCTION("isRawSelection", IsRawSelection),
66         DECLARE_NAPI_GETTER_SETTER("whereClause", GetWhereClause, SetWhereClause),
67         DECLARE_NAPI_GETTER_SETTER("whereArgs", GetWhereArgs, SetWhereArgs),
68         DECLARE_NAPI_GETTER_SETTER("order", GetOrder, SetOrder),
69         DECLARE_NAPI_GETTER("limit", GetLimit),
70         DECLARE_NAPI_GETTER("offset", GetOffset),
71         DECLARE_NAPI_GETTER("isDistinct", IsDistinct),
72         DECLARE_NAPI_GETTER("group", GetGroup),
73         DECLARE_NAPI_GETTER("index", GetIndex),
74         DECLARE_NAPI_GETTER("isNeedAnd", IsNeedAnd),
75         DECLARE_NAPI_GETTER("isSorted", IsSorted),
76     };
77 
78     napi_value cons = nullptr;
79     NAPI_CALL_RETURN_VOID(env, napi_define_class(env, "DataAbilityPredicates", NAPI_AUTO_LENGTH, New, nullptr,
80                                    sizeof(descriptors) / sizeof(napi_property_descriptor), descriptors, &cons));
81 
82     NAPI_CALL_RETURN_VOID(env, napi_create_reference(env, cons, 1, &constructor_));
83 
84     NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env, exports, "DataAbilityPredicates", cons));
85 }
86 
New(napi_env env,napi_callback_info info)87 napi_value DataAbilityPredicatesProxy::New(napi_env env, napi_callback_info info)
88 {
89     napi_value new_target = nullptr;
90     NAPI_CALL(env, napi_get_new_target(env, info, &new_target));
91     bool is_constructor = (new_target != nullptr);
92 
93     napi_value thiz = nullptr;
94     NAPI_CALL(env, napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr));
95 
96     if (is_constructor) {
97         auto *proxy = new (std::nothrow) DataAbilityPredicatesProxy();
98         if (proxy == nullptr) {
99             LOG_ERROR("DataAbilityPredicatesProxy::New new failed, proxy is nullptr.");
100             return nullptr;
101         }
102         napi_status status = napi_wrap(env, thiz, proxy, DataAbilityPredicatesProxy::Destructor, nullptr, nullptr);
103         if (status != napi_ok) {
104             LOG_ERROR("DataAbilityPredicatesProxy::New napi_wrap failed! napi_status:%{public}d!", status);
105             delete proxy;
106             return nullptr;
107         }
108         JSDFManager::GetInstance().AddNewInfo(proxy);
109         return thiz;
110     }
111 
112     napi_value cons = nullptr;
113     NAPI_CALL(env, napi_get_reference_value(env, constructor_, &cons));
114 
115     napi_value output = nullptr;
116     NAPI_CALL(env, napi_new_instance(env, cons, 0, nullptr, &output));
117 
118     return output;
119 }
120 
NewInstance(napi_env env,std::shared_ptr<NativeRdb::DataAbilityPredicates> value)121 napi_value DataAbilityPredicatesProxy::NewInstance(
122     napi_env env, std::shared_ptr<NativeRdb::DataAbilityPredicates> value)
123 {
124     napi_value cons = nullptr;
125     napi_status status = napi_get_reference_value(env, constructor_, &cons);
126     if (status != napi_ok) {
127         LOG_ERROR("DataAbilityPredicatesProxy get constructor failed! napi_status:%{public}d!", status);
128         return nullptr;
129     }
130 
131     napi_value instance = nullptr;
132     status = napi_new_instance(env, cons, 0, nullptr, &instance);
133     if (status != napi_ok) {
134         LOG_ERROR("DataAbilityPredicatesProxy napi_new_instance failed! napi_status:%{public}d!", status);
135         return nullptr;
136     }
137 
138     DataAbilityPredicatesProxy *proxy = nullptr;
139     status = napi_unwrap(env, instance, reinterpret_cast<void **>(&proxy));
140     if (status != napi_ok || proxy == nullptr) {
141         LOG_ERROR("DataAbilityPredicatesProxy native instance is nullptr! napi_status:%{public}d!", status);
142         return instance;
143     }
144     proxy->predicates_ = std::move(value);
145     return instance;
146 }
147 
GetNativePredicates(const napi_env env,const napi_value arg)148 std::shared_ptr<NativeRdb::DataAbilityPredicates> DataAbilityPredicatesProxy::GetNativePredicates(
149     const napi_env env, const napi_value arg)
150 {
151     if (arg == nullptr) {
152         LOG_ERROR("DataAbilityPredicatesProxy arg is null.");
153         return nullptr;
154     }
155     DataAbilityPredicatesProxy *proxy = nullptr;
156     napi_unwrap(env, arg, reinterpret_cast<void **>(&proxy));
157     if (proxy == nullptr) {
158         LOG_ERROR("DataAbilityPredicatesProxy proxy is null.");
159         return nullptr;
160     }
161     return proxy->predicates_;
162 }
163 
Destructor(napi_env env,void * nativeObject,void *)164 void DataAbilityPredicatesProxy::Destructor(napi_env env, void *nativeObject, void *)
165 {
166     auto tid = JSDFManager::GetInstance().GetFreedTid(nativeObject);
167     if (tid != 0) {
168         LOG_ERROR("(T:%{public}d) freed! data:0x%016" PRIXPTR, tid, uintptr_t(nativeObject) & LOWER_24_BITS_MASK);
169     }
170     DataAbilityPredicatesProxy *proxy = static_cast<DataAbilityPredicatesProxy *>(nativeObject);
171     if (proxy == nullptr) {
172         return;
173     }
174     proxy->predicates_ = std::move(nullptr);
175     delete proxy;
176 }
177 
~DataAbilityPredicatesProxy()178 DataAbilityPredicatesProxy::~DataAbilityPredicatesProxy()
179 {
180 }
181 
DataAbilityPredicatesProxy()182 DataAbilityPredicatesProxy::DataAbilityPredicatesProxy()
183 {
184     predicates_ = std::make_shared<DataAbilityPredicates>();
185 }
186 
GetNativePredicates(napi_env env,napi_callback_info info)187 std::shared_ptr<NativeRdb::DataAbilityPredicates> DataAbilityPredicatesProxy::GetNativePredicates(
188     napi_env env, napi_callback_info info)
189 {
190     DataAbilityPredicatesProxy *predicatesProxy = nullptr;
191     napi_value thiz = nullptr;
192     napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
193     napi_unwrap(env, thiz, reinterpret_cast<void **>(&predicatesProxy));
194     if (predicatesProxy == nullptr) {
195         return nullptr;
196     }
197     return predicatesProxy->predicates_;
198 }
199 
EqualTo(napi_env env,napi_callback_info info)200 napi_value DataAbilityPredicatesProxy::EqualTo(napi_env env, napi_callback_info info)
201 {
202     napi_value thiz = nullptr;
203     size_t argc = 2;
204     napi_value args[2] = { 0 };
205     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
206     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::EqualTo Invalid argvs!");
207     std::string field;
208     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
209     ValueObject value;
210     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
211     auto nativePredicates = GetNativePredicates(env, info);
212     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
213     nativePredicates->EqualTo(field, value);
214     return thiz;
215 }
216 
NotEqualTo(napi_env env,napi_callback_info info)217 napi_value DataAbilityPredicatesProxy::NotEqualTo(napi_env env, napi_callback_info info)
218 {
219     napi_value thiz = nullptr;
220     size_t argc = 2;
221     napi_value args[2] = { 0 };
222     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
223     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::NotEqualTo Invalid argvs!");
224     std::string field;
225     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
226     ValueObject value;
227     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
228     auto nativePredicates = GetNativePredicates(env, info);
229     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
230     nativePredicates->NotEqualTo(field, value);
231     return thiz;
232 }
233 
BeginWrap(napi_env env,napi_callback_info info)234 napi_value DataAbilityPredicatesProxy::BeginWrap(napi_env env, napi_callback_info info)
235 {
236     napi_value thiz = nullptr;
237     napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
238     auto nativePredicates = GetNativePredicates(env, info);
239     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
240     nativePredicates->BeginWrap();
241     return thiz;
242 }
243 
EndWrap(napi_env env,napi_callback_info info)244 napi_value DataAbilityPredicatesProxy::EndWrap(napi_env env, napi_callback_info info)
245 {
246     napi_value thiz = nullptr;
247     napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
248     auto nativePredicates = GetNativePredicates(env, info);
249     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
250     nativePredicates->EndWrap();
251     return thiz;
252 }
253 
Or(napi_env env,napi_callback_info info)254 napi_value DataAbilityPredicatesProxy::Or(napi_env env, napi_callback_info info)
255 {
256     napi_value thiz = nullptr;
257     napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
258     auto nativePredicates = GetNativePredicates(env, info);
259     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
260     nativePredicates->Or();
261     return thiz;
262 }
263 
And(napi_env env,napi_callback_info info)264 napi_value DataAbilityPredicatesProxy::And(napi_env env, napi_callback_info info)
265 {
266     napi_value thiz = nullptr;
267     napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
268     auto nativePredicates = GetNativePredicates(env, info);
269     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
270     nativePredicates->And();
271     return thiz;
272 }
273 
Contains(napi_env env,napi_callback_info info)274 napi_value DataAbilityPredicatesProxy::Contains(napi_env env, napi_callback_info info)
275 {
276     napi_value thiz = nullptr;
277     size_t argc = 2;
278     napi_value args[2] = { 0 };
279     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
280     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Contains Invalid argvs!");
281     std::string field;
282     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
283     std::string value;
284     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
285     auto nativePredicates = GetNativePredicates(env, info);
286     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
287     nativePredicates->Contains(field, value);
288     return thiz;
289 }
290 
BeginsWith(napi_env env,napi_callback_info info)291 napi_value DataAbilityPredicatesProxy::BeginsWith(napi_env env, napi_callback_info info)
292 {
293     napi_value thiz = nullptr;
294     size_t argc = 2;
295     napi_value args[2] = { 0 };
296     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
297     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::BeginsWith Invalid argvs!");
298     std::string field;
299     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
300     std::string value;
301     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
302     auto nativePredicates = GetNativePredicates(env, info);
303     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
304     nativePredicates->BeginsWith(field, value);
305     return thiz;
306 }
307 
EndsWith(napi_env env,napi_callback_info info)308 napi_value DataAbilityPredicatesProxy::EndsWith(napi_env env, napi_callback_info info)
309 {
310     napi_value thiz = nullptr;
311     size_t argc = 2;
312     napi_value args[2] = { 0 };
313     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
314     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::EndsWith Invalid argvs!");
315     std::string field;
316     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
317     std::string value;
318     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
319     auto nativePredicates = GetNativePredicates(env, info);
320     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
321     nativePredicates->EndsWith(field, value);
322     return thiz;
323 }
324 
IsNull(napi_env env,napi_callback_info info)325 napi_value DataAbilityPredicatesProxy::IsNull(napi_env env, napi_callback_info info)
326 {
327     napi_value thiz = nullptr;
328     size_t argc = 1;
329     napi_value args[1] = { 0 };
330     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
331     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::IsNull Invalid argvs!");
332     std::string field;
333     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
334     auto nativePredicates = GetNativePredicates(env, info);
335     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
336     nativePredicates->IsNull(field);
337     return thiz;
338 }
339 
IsNotNull(napi_env env,napi_callback_info info)340 napi_value DataAbilityPredicatesProxy::IsNotNull(napi_env env, napi_callback_info info)
341 {
342     napi_value thiz = nullptr;
343     size_t argc = 1;
344     napi_value args[1] = { 0 };
345     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
346     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::IsNotNull Invalid argvs!");
347     std::string field;
348     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
349     auto nativePredicates = GetNativePredicates(env, info);
350     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
351     nativePredicates->IsNotNull(field);
352     return thiz;
353 }
354 
Like(napi_env env,napi_callback_info info)355 napi_value DataAbilityPredicatesProxy::Like(napi_env env, napi_callback_info info)
356 {
357     napi_value thiz = nullptr;
358     size_t argc = 2;
359     napi_value args[2] = { 0 };
360     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
361     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Like Invalid argvs!");
362     std::string field;
363     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
364     std::string value;
365     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
366     auto nativePredicates = GetNativePredicates(env, info);
367     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
368     nativePredicates->Like(field, value);
369     return thiz;
370 }
371 
Glob(napi_env env,napi_callback_info info)372 napi_value DataAbilityPredicatesProxy::Glob(napi_env env, napi_callback_info info)
373 {
374     napi_value thiz = nullptr;
375     size_t argc = 2;
376     napi_value args[2] = { 0 };
377     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
378     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Glob Invalid argvs!");
379     std::string field;
380     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
381     std::string value;
382     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
383     auto nativePredicates = GetNativePredicates(env, info);
384     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
385     nativePredicates->Glob(field, value);
386     return thiz;
387 }
388 
Between(napi_env env,napi_callback_info info)389 napi_value DataAbilityPredicatesProxy::Between(napi_env env, napi_callback_info info)
390 {
391     napi_value thiz = nullptr;
392     size_t argc = 3;
393     // 3 represents the number of parameters
394     napi_value args[3] = { 0 };
395     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
396     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Between Invalid argvs!");
397     std::string field;
398     // args[0] represents the first parameter
399     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
400     ValueObject low;
401     // args[1] represents the second parameter
402     JSUtils::Convert2Value(env, args[1], low);
403     ValueObject high;
404     // args[2] represents the third parameter
405     JSUtils::Convert2Value(env, args[2], high);
406     auto nativePredicates = GetNativePredicates(env, info);
407     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
408     nativePredicates->Between(field, low, high);
409     return thiz;
410 }
411 
NotBetween(napi_env env,napi_callback_info info)412 napi_value DataAbilityPredicatesProxy::NotBetween(napi_env env, napi_callback_info info)
413 {
414     napi_value thiz = nullptr;
415     size_t argc = 3;
416     // 3 represents the number of parameters
417     napi_value args[3] = { 0 };
418     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
419     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::NotBetween Invalid argvs!");
420     std::string field;
421     // args[0] represents the first parameter
422     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
423     ValueObject low;
424     // args[1] represents the second parameter
425     JSUtils::Convert2Value(env, args[1], low);
426     ValueObject high;
427     // args[2] represents the third parameter
428     JSUtils::Convert2Value(env, args[2], high);
429     auto nativePredicates = GetNativePredicates(env, info);
430     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
431     nativePredicates->NotBetween(field, low, high);
432     return thiz;
433 }
434 
GreaterThan(napi_env env,napi_callback_info info)435 napi_value DataAbilityPredicatesProxy::GreaterThan(napi_env env, napi_callback_info info)
436 {
437     napi_value thiz = nullptr;
438     size_t argc = 2;
439     napi_value args[2] = { 0 };
440     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
441     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::GreaterThan Invalid argvs!");
442     std::string field;
443     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
444     ValueObject value;
445     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
446     auto nativePredicates = GetNativePredicates(env, info);
447     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
448     nativePredicates->GreaterThan(field, value);
449     return thiz;
450 }
451 
LessThan(napi_env env,napi_callback_info info)452 napi_value DataAbilityPredicatesProxy::LessThan(napi_env env, napi_callback_info info)
453 {
454     napi_value thiz = nullptr;
455     size_t argc = 2;
456     napi_value args[2] = { 0 };
457     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
458     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::LessThan Invalid argvs!");
459     std::string field;
460     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
461     ValueObject value;
462     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
463     auto nativePredicates = GetNativePredicates(env, info);
464     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
465     nativePredicates->LessThan(field, value);
466     return thiz;
467 }
468 
GreaterThanOrEqualTo(napi_env env,napi_callback_info info)469 napi_value DataAbilityPredicatesProxy::GreaterThanOrEqualTo(napi_env env, napi_callback_info info)
470 {
471     napi_value thiz = nullptr;
472     size_t argc = 2;
473     napi_value args[2] = { 0 };
474     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
475     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::GreaterThanOrEqualTo Invalid argvs!");
476     std::string field;
477     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
478     ValueObject value;
479     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
480     auto nativePredicates = GetNativePredicates(env, info);
481     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
482     nativePredicates->GreaterThanOrEqualTo(field, value);
483     return thiz;
484 }
485 
LessThanOrEqualTo(napi_env env,napi_callback_info info)486 napi_value DataAbilityPredicatesProxy::LessThanOrEqualTo(napi_env env, napi_callback_info info)
487 {
488     napi_value thiz = nullptr;
489     size_t argc = 2;
490     napi_value args[2] = { 0 };
491     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
492     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::LessThanOrEqualTo Invalid argvs!");
493     std::string field;
494     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
495     ValueObject value;
496     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
497     auto nativePredicates = GetNativePredicates(env, info);
498     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
499     nativePredicates->LessThanOrEqualTo(field, value);
500     return thiz;
501 }
502 
OrderByAsc(napi_env env,napi_callback_info info)503 napi_value DataAbilityPredicatesProxy::OrderByAsc(napi_env env, napi_callback_info info)
504 {
505     napi_value thiz = nullptr;
506     size_t argc = 1;
507     napi_value args[1] = { 0 };
508     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
509     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::OrderByAsc Invalid argvs!");
510 
511     std::string field;
512     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
513 
514     auto nativePredicates = GetNativePredicates(env, info);
515     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
516     nativePredicates->OrderByAsc(field);
517     return thiz;
518 }
519 
OrderByDesc(napi_env env,napi_callback_info info)520 napi_value DataAbilityPredicatesProxy::OrderByDesc(napi_env env, napi_callback_info info)
521 {
522     napi_value thiz = nullptr;
523     size_t argc = 1;
524     napi_value args[1] = { 0 };
525     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
526     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::OrderByDesc Invalid argvs!");
527 
528     std::string field;
529     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
530 
531     auto nativePredicates = GetNativePredicates(env, info);
532     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
533     nativePredicates->OrderByDesc(field);
534     return thiz;
535 }
536 
Distinct(napi_env env,napi_callback_info info)537 napi_value DataAbilityPredicatesProxy::Distinct(napi_env env, napi_callback_info info)
538 {
539     napi_value thiz = nullptr;
540     napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
541     auto nativePredicates = GetNativePredicates(env, info);
542     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
543     nativePredicates->Distinct();
544     return thiz;
545 }
546 
Limit(napi_env env,napi_callback_info info)547 napi_value DataAbilityPredicatesProxy::Limit(napi_env env, napi_callback_info info)
548 {
549     napi_value thiz = nullptr;
550     size_t argc = 1;
551     napi_value args[1] = { 0 };
552     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
553     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Limit Invalid argvs!");
554 
555     int32_t limit = 0;
556     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2ValueExt(env, args[0], limit) == napi_ok, "the limit is invalid");
557 
558     auto nativePredicates = GetNativePredicates(env, info);
559     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
560     nativePredicates->Limit(limit);
561     return thiz;
562 }
563 
Offset(napi_env env,napi_callback_info info)564 napi_value DataAbilityPredicatesProxy::Offset(napi_env env, napi_callback_info info)
565 {
566     napi_value thiz = nullptr;
567     size_t argc = 1;
568     napi_value args[1] = { 0 };
569     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
570     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Offset Invalid argvs!");
571 
572     int32_t offset = 0;
573     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2ValueExt(env, args[0], offset) == napi_ok, "the offset is invalid");
574 
575     auto nativePredicates = GetNativePredicates(env, info);
576     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
577     nativePredicates->Offset(offset);
578     return thiz;
579 }
580 
GroupBy(napi_env env,napi_callback_info info)581 napi_value DataAbilityPredicatesProxy::GroupBy(napi_env env, napi_callback_info info)
582 {
583     napi_value thiz = nullptr;
584     size_t argc = 1;
585     napi_value args[1] = { 0 };
586     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
587     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::GroupBy Invalid argvs!");
588 
589     std::vector<std::string> fields = {};
590     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], fields) == napi_ok, "the fields is invalid");
591 
592     auto nativePredicates = GetNativePredicates(env, info);
593     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
594     nativePredicates->GroupBy(fields);
595     return thiz;
596 }
597 
IndexedBy(napi_env env,napi_callback_info info)598 napi_value DataAbilityPredicatesProxy::IndexedBy(napi_env env, napi_callback_info info)
599 {
600     napi_value thiz = nullptr;
601     size_t argc = 1;
602     napi_value args[1] = { 0 };
603     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
604     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::IndexedBy Invalid argvs!");
605 
606     std::string indexName;
607     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], indexName) == napi_ok, "the indexName is invalid");
608 
609     auto nativePredicates = GetNativePredicates(env, info);
610     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
611     nativePredicates->IndexedBy(indexName);
612     return thiz;
613 }
614 
In(napi_env env,napi_callback_info info)615 napi_value DataAbilityPredicatesProxy::In(napi_env env, napi_callback_info info)
616 {
617     napi_value thiz = nullptr;
618     size_t argc = 2;
619     napi_value args[2] = { 0 };
620     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
621     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::In Invalid argvs!");
622 
623     std::string field;
624     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
625 
626     std::vector<ValueObject> values;
627     NAPI_ASSERT(env, JSUtils::Convert2Value(env, args[1], values) == napi_ok, "Invalid values!");
628 
629     auto nativePredicates = GetNativePredicates(env, info);
630     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
631     nativePredicates->In(field, values);
632     return thiz;
633 }
634 
NotIn(napi_env env,napi_callback_info info)635 napi_value DataAbilityPredicatesProxy::NotIn(napi_env env, napi_callback_info info)
636 {
637     napi_value thiz = nullptr;
638     size_t argc = 2;
639     napi_value args[2] = { 0 };
640     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
641     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::NotIn Invalid argvs!");
642 
643     std::string field;
644     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
645 
646     std::vector<ValueObject> values;
647     NAPI_ASSERT(env, JSUtils::Convert2Value(env, args[1], values) == napi_ok, "Invalid values");
648 
649     auto nativePredicates = GetNativePredicates(env, info);
650     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
651     nativePredicates->NotIn(field, values);
652     return thiz;
653 }
654 
Clear(napi_env env,napi_callback_info info)655 napi_value DataAbilityPredicatesProxy::Clear(napi_env env, napi_callback_info info)
656 {
657     napi_value thiz = nullptr;
658     napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
659     auto nativePredicates = GetNativePredicates(env, info);
660     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
661     nativePredicates->Clear();
662     return thiz;
663 }
664 
IsRawSelection(napi_env env,napi_callback_info info)665 napi_value DataAbilityPredicatesProxy::IsRawSelection(napi_env env, napi_callback_info info)
666 {
667     napi_value thiz = nullptr;
668     napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
669     auto nativePredicates = GetNativePredicates(env, info);
670     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
671     bool out = nativePredicates->IsRawSelection();
672     return JSUtils::Convert2JSValue(env, out);
673 }
674 
GetPredicates() const675 std::shared_ptr<NativeRdb::DataAbilityPredicates> DataAbilityPredicatesProxy::GetPredicates() const
676 {
677     return this->predicates_;
678 }
679 
GetWhereClause(napi_env env,napi_callback_info info)680 napi_value DataAbilityPredicatesProxy::GetWhereClause(napi_env env, napi_callback_info info)
681 {
682     auto nativePredicates = GetNativePredicates(env, info);
683     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
684     auto ret = nativePredicates->GetWhereClause();
685     return JSUtils::Convert2JSValue(env, ret);
686 }
687 
SetWhereClause(napi_env env,napi_callback_info info)688 napi_value DataAbilityPredicatesProxy::SetWhereClause(napi_env env, napi_callback_info info)
689 {
690     napi_value thiz = nullptr;
691     size_t argc = 1;
692     napi_value args[1] = { 0 };
693     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
694     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::SetWhereClause Invalid argvs!");
695 
696     std::string whereClause;
697     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], whereClause) == napi_ok, "whereClause is invalid");
698 
699     auto nativePredicates = GetNativePredicates(env, info);
700     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
701     nativePredicates->SetWhereClause(whereClause);
702 
703     return thiz;
704 }
705 
GetWhereArgs(napi_env env,napi_callback_info info)706 napi_value DataAbilityPredicatesProxy::GetWhereArgs(napi_env env, napi_callback_info info)
707 {
708     auto nativePredicates = GetNativePredicates(env, info);
709     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
710     auto ret = nativePredicates->GetWhereArgs();
711     return JSUtils::Convert2JSValue(env, ret);
712 }
713 
SetWhereArgs(napi_env env,napi_callback_info info)714 napi_value DataAbilityPredicatesProxy::SetWhereArgs(napi_env env, napi_callback_info info)
715 {
716     napi_value thiz = nullptr;
717     size_t argc = 1;
718     napi_value args[1] = { 0 };
719     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
720     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::SetWhereArgs Invalid argvs!");
721 
722     std::vector<std::string> whereArgs;
723     NAPI_ASSERT(env, JSUtils::Convert2Value(env, args[0], whereArgs) == napi_ok, "Invalid whereArgs!");
724 
725     auto nativePredicates = GetNativePredicates(env, info);
726     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
727     nativePredicates->SetWhereArgs(whereArgs);
728 
729     return thiz;
730 }
731 
GetOrder(napi_env env,napi_callback_info info)732 napi_value DataAbilityPredicatesProxy::GetOrder(napi_env env, napi_callback_info info)
733 {
734     auto nativePredicates = GetNativePredicates(env, info);
735     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
736     auto ret = nativePredicates->GetOrder();
737     return JSUtils::Convert2JSValue(env, ret);
738 }
739 
SetOrder(napi_env env,napi_callback_info info)740 napi_value DataAbilityPredicatesProxy::SetOrder(napi_env env, napi_callback_info info)
741 {
742     napi_value thiz = nullptr;
743     size_t argc = 1;
744     napi_value args[1] = { 0 };
745     napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
746     NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::SetOrder Invalid argvs!");
747 
748     std::string order;
749     RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], order) != napi_ok, "the order is invalid");
750 
751     auto nativePredicates = GetNativePredicates(env, info);
752     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
753     nativePredicates->SetOrder(order);
754 
755     return thiz;
756 }
757 
GetLimit(napi_env env,napi_callback_info info)758 napi_value DataAbilityPredicatesProxy::GetLimit(napi_env env, napi_callback_info info)
759 {
760     auto nativePredicates = GetNativePredicates(env, info);
761     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
762     return JSUtils::Convert2JSValue(env, nativePredicates->GetLimit());
763 }
764 
GetOffset(napi_env env,napi_callback_info info)765 napi_value DataAbilityPredicatesProxy::GetOffset(napi_env env, napi_callback_info info)
766 {
767     auto nativePredicates = GetNativePredicates(env, info);
768     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
769     return JSUtils::Convert2JSValue(env, nativePredicates->GetOffset());
770 }
771 
IsDistinct(napi_env env,napi_callback_info info)772 napi_value DataAbilityPredicatesProxy::IsDistinct(napi_env env, napi_callback_info info)
773 {
774     auto nativePredicates = GetNativePredicates(env, info);
775     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
776     return JSUtils::Convert2JSValue(env, nativePredicates->IsDistinct());
777 }
778 
GetGroup(napi_env env,napi_callback_info info)779 napi_value DataAbilityPredicatesProxy::GetGroup(napi_env env, napi_callback_info info)
780 {
781     auto nativePredicates = GetNativePredicates(env, info);
782     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
783     auto ret = nativePredicates->GetGroup();
784     return JSUtils::Convert2JSValue(env, ret);
785 }
786 
GetIndex(napi_env env,napi_callback_info info)787 napi_value DataAbilityPredicatesProxy::GetIndex(napi_env env, napi_callback_info info)
788 {
789     auto nativePredicates = GetNativePredicates(env, info);
790     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
791     auto ret = nativePredicates->GetIndex();
792     return JSUtils::Convert2JSValue(env, ret);
793 }
794 
IsNeedAnd(napi_env env,napi_callback_info info)795 napi_value DataAbilityPredicatesProxy::IsNeedAnd(napi_env env, napi_callback_info info)
796 {
797     auto nativePredicates = GetNativePredicates(env, info);
798     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
799     return JSUtils::Convert2JSValue(env, nativePredicates->IsNeedAnd());
800 }
801 
IsSorted(napi_env env,napi_callback_info info)802 napi_value DataAbilityPredicatesProxy::IsSorted(napi_env env, napi_callback_info info)
803 {
804     auto nativePredicates = GetNativePredicates(env, info);
805     RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
806     return JSUtils::Convert2JSValue(env, nativePredicates->IsSorted());
807 }
808 } // namespace DataAbilityJsKit
809 } // namespace OHOS
810 
811 EXTERN_C_START
NAPI_OHOS_Data_DataAbilityJsKit_DataAbilityPredicatesProxy_NewInstance(napi_env env,DataAbilityPredicates * predicates)812 API_EXPORT napi_value NAPI_OHOS_Data_DataAbilityJsKit_DataAbilityPredicatesProxy_NewInstance(napi_env env,
813     DataAbilityPredicates *predicates)
814 {
815     return OHOS::DataAbilityJsKit::DataAbilityPredicatesProxy::NewInstance(
816         env, std::shared_ptr<DataAbilityPredicates>(predicates));
817 }
818 
NAPI_OHOS_Data_DataAbilityJsKit_DataAbilityPredicatesProxy_GetNativeObject(const napi_env env,const napi_value arg)819 API_EXPORT DataAbilityPredicates *NAPI_OHOS_Data_DataAbilityJsKit_DataAbilityPredicatesProxy_GetNativeObject(
820     const napi_env env, const napi_value arg)
821 {
822     auto predicates = OHOS::DataAbilityJsKit::DataAbilityPredicatesProxy::GetNativePredicates(env, arg);
823     return predicates.get();
824 }
825 EXTERN_C_END