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