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