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