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