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