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 #include <memory>
16 #define LOG_TAG "DataAbilityPredicatesProxy"
17 #include "napi_data_ability_predicates.h"
18
19 #include "js_df_manager.h"
20 #include "js_utils.h"
21 #include "logger.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 || proxy == nullptr) {
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 if (proxy == nullptr) {
172 return;
173 }
174 proxy->predicates_ = std::move(nullptr);
175 delete proxy;
176 }
177
~DataAbilityPredicatesProxy()178 DataAbilityPredicatesProxy::~DataAbilityPredicatesProxy()
179 {
180 }
181
DataAbilityPredicatesProxy()182 DataAbilityPredicatesProxy::DataAbilityPredicatesProxy()
183 {
184 predicates_ = std::make_shared<DataAbilityPredicates>();
185 }
186
GetNativePredicates(napi_env env,napi_callback_info info)187 std::shared_ptr<NativeRdb::DataAbilityPredicates> DataAbilityPredicatesProxy::GetNativePredicates(
188 napi_env env, napi_callback_info info)
189 {
190 DataAbilityPredicatesProxy *predicatesProxy = nullptr;
191 napi_value thiz = nullptr;
192 napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
193 napi_unwrap(env, thiz, reinterpret_cast<void **>(&predicatesProxy));
194 if (predicatesProxy == nullptr) {
195 return nullptr;
196 }
197 return predicatesProxy->predicates_;
198 }
199
EqualTo(napi_env env,napi_callback_info info)200 napi_value DataAbilityPredicatesProxy::EqualTo(napi_env env, napi_callback_info info)
201 {
202 napi_value thiz = nullptr;
203 size_t argc = 2;
204 napi_value args[2] = { 0 };
205 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
206 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::EqualTo Invalid argvs!");
207 std::string field;
208 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
209 ValueObject value;
210 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
211 auto nativePredicates = GetNativePredicates(env, info);
212 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
213 nativePredicates->EqualTo(field, value);
214 return thiz;
215 }
216
NotEqualTo(napi_env env,napi_callback_info info)217 napi_value DataAbilityPredicatesProxy::NotEqualTo(napi_env env, napi_callback_info info)
218 {
219 napi_value thiz = nullptr;
220 size_t argc = 2;
221 napi_value args[2] = { 0 };
222 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
223 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::NotEqualTo Invalid argvs!");
224 std::string field;
225 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
226 ValueObject value;
227 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
228 auto nativePredicates = GetNativePredicates(env, info);
229 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
230 nativePredicates->NotEqualTo(field, value);
231 return thiz;
232 }
233
BeginWrap(napi_env env,napi_callback_info info)234 napi_value DataAbilityPredicatesProxy::BeginWrap(napi_env env, napi_callback_info info)
235 {
236 napi_value thiz = nullptr;
237 napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
238 auto nativePredicates = GetNativePredicates(env, info);
239 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
240 nativePredicates->BeginWrap();
241 return thiz;
242 }
243
EndWrap(napi_env env,napi_callback_info info)244 napi_value DataAbilityPredicatesProxy::EndWrap(napi_env env, napi_callback_info info)
245 {
246 napi_value thiz = nullptr;
247 napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
248 auto nativePredicates = GetNativePredicates(env, info);
249 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
250 nativePredicates->EndWrap();
251 return thiz;
252 }
253
Or(napi_env env,napi_callback_info info)254 napi_value DataAbilityPredicatesProxy::Or(napi_env env, napi_callback_info info)
255 {
256 napi_value thiz = nullptr;
257 napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
258 auto nativePredicates = GetNativePredicates(env, info);
259 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
260 nativePredicates->Or();
261 return thiz;
262 }
263
And(napi_env env,napi_callback_info info)264 napi_value DataAbilityPredicatesProxy::And(napi_env env, napi_callback_info info)
265 {
266 napi_value thiz = nullptr;
267 napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
268 auto nativePredicates = GetNativePredicates(env, info);
269 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
270 nativePredicates->And();
271 return thiz;
272 }
273
Contains(napi_env env,napi_callback_info info)274 napi_value DataAbilityPredicatesProxy::Contains(napi_env env, napi_callback_info info)
275 {
276 napi_value thiz = nullptr;
277 size_t argc = 2;
278 napi_value args[2] = { 0 };
279 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
280 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Contains Invalid argvs!");
281 std::string field;
282 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
283 std::string value;
284 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
285 auto nativePredicates = GetNativePredicates(env, info);
286 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
287 nativePredicates->Contains(field, value);
288 return thiz;
289 }
290
BeginsWith(napi_env env,napi_callback_info info)291 napi_value DataAbilityPredicatesProxy::BeginsWith(napi_env env, napi_callback_info info)
292 {
293 napi_value thiz = nullptr;
294 size_t argc = 2;
295 napi_value args[2] = { 0 };
296 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
297 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::BeginsWith Invalid argvs!");
298 std::string field;
299 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
300 std::string value;
301 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
302 auto nativePredicates = GetNativePredicates(env, info);
303 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
304 nativePredicates->BeginsWith(field, value);
305 return thiz;
306 }
307
EndsWith(napi_env env,napi_callback_info info)308 napi_value DataAbilityPredicatesProxy::EndsWith(napi_env env, napi_callback_info info)
309 {
310 napi_value thiz = nullptr;
311 size_t argc = 2;
312 napi_value args[2] = { 0 };
313 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
314 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::EndsWith Invalid argvs!");
315 std::string field;
316 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
317 std::string value;
318 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
319 auto nativePredicates = GetNativePredicates(env, info);
320 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
321 nativePredicates->EndsWith(field, value);
322 return thiz;
323 }
324
IsNull(napi_env env,napi_callback_info info)325 napi_value DataAbilityPredicatesProxy::IsNull(napi_env env, napi_callback_info info)
326 {
327 napi_value thiz = nullptr;
328 size_t argc = 1;
329 napi_value args[1] = { 0 };
330 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
331 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::IsNull Invalid argvs!");
332 std::string field;
333 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
334 auto nativePredicates = GetNativePredicates(env, info);
335 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
336 nativePredicates->IsNull(field);
337 return thiz;
338 }
339
IsNotNull(napi_env env,napi_callback_info info)340 napi_value DataAbilityPredicatesProxy::IsNotNull(napi_env env, napi_callback_info info)
341 {
342 napi_value thiz = nullptr;
343 size_t argc = 1;
344 napi_value args[1] = { 0 };
345 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
346 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::IsNotNull Invalid argvs!");
347 std::string field;
348 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
349 auto nativePredicates = GetNativePredicates(env, info);
350 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
351 nativePredicates->IsNotNull(field);
352 return thiz;
353 }
354
Like(napi_env env,napi_callback_info info)355 napi_value DataAbilityPredicatesProxy::Like(napi_env env, napi_callback_info info)
356 {
357 napi_value thiz = nullptr;
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 > 0, "DataAbilityPredicatesProxy::Like Invalid argvs!");
362 std::string field;
363 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
364 std::string value;
365 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
366 auto nativePredicates = GetNativePredicates(env, info);
367 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
368 nativePredicates->Like(field, value);
369 return thiz;
370 }
371
Glob(napi_env env,napi_callback_info info)372 napi_value DataAbilityPredicatesProxy::Glob(napi_env env, napi_callback_info info)
373 {
374 napi_value thiz = nullptr;
375 size_t argc = 2;
376 napi_value args[2] = { 0 };
377 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
378 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Glob Invalid argvs!");
379 std::string field;
380 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
381 std::string value;
382 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
383 auto nativePredicates = GetNativePredicates(env, info);
384 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
385 nativePredicates->Glob(field, value);
386 return thiz;
387 }
388
Between(napi_env env,napi_callback_info info)389 napi_value DataAbilityPredicatesProxy::Between(napi_env env, napi_callback_info info)
390 {
391 napi_value thiz = nullptr;
392 size_t argc = 3;
393 // 3 represents the number of parameters
394 napi_value args[3] = { 0 };
395 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
396 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Between Invalid argvs!");
397 std::string field;
398 // args[0] represents the first parameter
399 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
400 ValueObject low;
401 // args[1] represents the second parameter
402 JSUtils::Convert2Value(env, args[1], low);
403 ValueObject high;
404 // args[2] represents the third parameter
405 JSUtils::Convert2Value(env, args[2], high);
406 auto nativePredicates = GetNativePredicates(env, info);
407 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
408 nativePredicates->Between(field, low, high);
409 return thiz;
410 }
411
NotBetween(napi_env env,napi_callback_info info)412 napi_value DataAbilityPredicatesProxy::NotBetween(napi_env env, napi_callback_info info)
413 {
414 napi_value thiz = nullptr;
415 size_t argc = 3;
416 // 3 represents the number of parameters
417 napi_value args[3] = { 0 };
418 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
419 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::NotBetween Invalid argvs!");
420 std::string field;
421 // args[0] represents the first parameter
422 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
423 ValueObject low;
424 // args[1] represents the second parameter
425 JSUtils::Convert2Value(env, args[1], low);
426 ValueObject high;
427 // args[2] represents the third parameter
428 JSUtils::Convert2Value(env, args[2], high);
429 auto nativePredicates = GetNativePredicates(env, info);
430 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
431 nativePredicates->NotBetween(field, low, high);
432 return thiz;
433 }
434
GreaterThan(napi_env env,napi_callback_info info)435 napi_value DataAbilityPredicatesProxy::GreaterThan(napi_env env, napi_callback_info info)
436 {
437 napi_value thiz = nullptr;
438 size_t argc = 2;
439 napi_value args[2] = { 0 };
440 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
441 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::GreaterThan Invalid argvs!");
442 std::string field;
443 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
444 ValueObject value;
445 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
446 auto nativePredicates = GetNativePredicates(env, info);
447 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
448 nativePredicates->GreaterThan(field, value);
449 return thiz;
450 }
451
LessThan(napi_env env,napi_callback_info info)452 napi_value DataAbilityPredicatesProxy::LessThan(napi_env env, napi_callback_info info)
453 {
454 napi_value thiz = nullptr;
455 size_t argc = 2;
456 napi_value args[2] = { 0 };
457 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
458 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::LessThan Invalid argvs!");
459 std::string field;
460 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
461 ValueObject value;
462 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
463 auto nativePredicates = GetNativePredicates(env, info);
464 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
465 nativePredicates->LessThan(field, value);
466 return thiz;
467 }
468
GreaterThanOrEqualTo(napi_env env,napi_callback_info info)469 napi_value DataAbilityPredicatesProxy::GreaterThanOrEqualTo(napi_env env, napi_callback_info info)
470 {
471 napi_value thiz = nullptr;
472 size_t argc = 2;
473 napi_value args[2] = { 0 };
474 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
475 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::GreaterThanOrEqualTo Invalid argvs!");
476 std::string field;
477 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
478 ValueObject value;
479 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
480 auto nativePredicates = GetNativePredicates(env, info);
481 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
482 nativePredicates->GreaterThanOrEqualTo(field, value);
483 return thiz;
484 }
485
LessThanOrEqualTo(napi_env env,napi_callback_info info)486 napi_value DataAbilityPredicatesProxy::LessThanOrEqualTo(napi_env env, napi_callback_info info)
487 {
488 napi_value thiz = nullptr;
489 size_t argc = 2;
490 napi_value args[2] = { 0 };
491 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
492 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::LessThanOrEqualTo Invalid argvs!");
493 std::string field;
494 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
495 ValueObject value;
496 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[1], value) == napi_ok, "the value is invalid");
497 auto nativePredicates = GetNativePredicates(env, info);
498 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
499 nativePredicates->LessThanOrEqualTo(field, value);
500 return thiz;
501 }
502
OrderByAsc(napi_env env,napi_callback_info info)503 napi_value DataAbilityPredicatesProxy::OrderByAsc(napi_env env, napi_callback_info info)
504 {
505 napi_value thiz = nullptr;
506 size_t argc = 1;
507 napi_value args[1] = { 0 };
508 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
509 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::OrderByAsc Invalid argvs!");
510
511 std::string field;
512 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
513
514 auto nativePredicates = GetNativePredicates(env, info);
515 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
516 nativePredicates->OrderByAsc(field);
517 return thiz;
518 }
519
OrderByDesc(napi_env env,napi_callback_info info)520 napi_value DataAbilityPredicatesProxy::OrderByDesc(napi_env env, napi_callback_info info)
521 {
522 napi_value thiz = nullptr;
523 size_t argc = 1;
524 napi_value args[1] = { 0 };
525 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
526 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::OrderByDesc Invalid argvs!");
527
528 std::string field;
529 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
530
531 auto nativePredicates = GetNativePredicates(env, info);
532 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
533 nativePredicates->OrderByDesc(field);
534 return thiz;
535 }
536
Distinct(napi_env env,napi_callback_info info)537 napi_value DataAbilityPredicatesProxy::Distinct(napi_env env, napi_callback_info info)
538 {
539 napi_value thiz = nullptr;
540 napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
541 auto nativePredicates = GetNativePredicates(env, info);
542 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
543 nativePredicates->Distinct();
544 return thiz;
545 }
546
Limit(napi_env env,napi_callback_info info)547 napi_value DataAbilityPredicatesProxy::Limit(napi_env env, napi_callback_info info)
548 {
549 napi_value thiz = nullptr;
550 size_t argc = 1;
551 napi_value args[1] = { 0 };
552 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
553 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Limit Invalid argvs!");
554
555 int32_t limit = 0;
556 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2ValueExt(env, args[0], limit) == napi_ok, "the limit is invalid");
557
558 auto nativePredicates = GetNativePredicates(env, info);
559 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
560 nativePredicates->Limit(limit);
561 return thiz;
562 }
563
Offset(napi_env env,napi_callback_info info)564 napi_value DataAbilityPredicatesProxy::Offset(napi_env env, napi_callback_info info)
565 {
566 napi_value thiz = nullptr;
567 size_t argc = 1;
568 napi_value args[1] = { 0 };
569 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
570 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::Offset Invalid argvs!");
571
572 int32_t offset = 0;
573 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2ValueExt(env, args[0], offset) == napi_ok, "the offset is invalid");
574
575 auto nativePredicates = GetNativePredicates(env, info);
576 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
577 nativePredicates->Offset(offset);
578 return thiz;
579 }
580
GroupBy(napi_env env,napi_callback_info info)581 napi_value DataAbilityPredicatesProxy::GroupBy(napi_env env, napi_callback_info info)
582 {
583 napi_value thiz = nullptr;
584 size_t argc = 1;
585 napi_value args[1] = { 0 };
586 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
587 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::GroupBy Invalid argvs!");
588
589 std::vector<std::string> fields = {};
590 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], fields) == napi_ok, "the fields is invalid");
591
592 auto nativePredicates = GetNativePredicates(env, info);
593 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
594 nativePredicates->GroupBy(fields);
595 return thiz;
596 }
597
IndexedBy(napi_env env,napi_callback_info info)598 napi_value DataAbilityPredicatesProxy::IndexedBy(napi_env env, napi_callback_info info)
599 {
600 napi_value thiz = nullptr;
601 size_t argc = 1;
602 napi_value args[1] = { 0 };
603 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
604 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::IndexedBy Invalid argvs!");
605
606 std::string indexName;
607 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], indexName) == napi_ok, "the indexName is invalid");
608
609 auto nativePredicates = GetNativePredicates(env, info);
610 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
611 nativePredicates->IndexedBy(indexName);
612 return thiz;
613 }
614
In(napi_env env,napi_callback_info info)615 napi_value DataAbilityPredicatesProxy::In(napi_env env, napi_callback_info info)
616 {
617 napi_value thiz = nullptr;
618 size_t argc = 2;
619 napi_value args[2] = { 0 };
620 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
621 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::In Invalid argvs!");
622
623 std::string field;
624 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
625
626 std::vector<ValueObject> values;
627 NAPI_ASSERT(env, JSUtils::Convert2Value(env, args[1], values) == napi_ok, "Invalid values!");
628
629 auto nativePredicates = GetNativePredicates(env, info);
630 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
631 nativePredicates->In(field, values);
632 return thiz;
633 }
634
NotIn(napi_env env,napi_callback_info info)635 napi_value DataAbilityPredicatesProxy::NotIn(napi_env env, napi_callback_info info)
636 {
637 napi_value thiz = nullptr;
638 size_t argc = 2;
639 napi_value args[2] = { 0 };
640 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
641 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::NotIn Invalid argvs!");
642
643 std::string field;
644 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], field) == napi_ok, "the field is invalid");
645
646 std::vector<ValueObject> values;
647 NAPI_ASSERT(env, JSUtils::Convert2Value(env, args[1], values) == napi_ok, "Invalid values");
648
649 auto nativePredicates = GetNativePredicates(env, info);
650 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
651 nativePredicates->NotIn(field, values);
652 return thiz;
653 }
654
Clear(napi_env env,napi_callback_info info)655 napi_value DataAbilityPredicatesProxy::Clear(napi_env env, napi_callback_info info)
656 {
657 napi_value thiz = nullptr;
658 napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
659 auto nativePredicates = GetNativePredicates(env, info);
660 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
661 nativePredicates->Clear();
662 return thiz;
663 }
664
IsRawSelection(napi_env env,napi_callback_info info)665 napi_value DataAbilityPredicatesProxy::IsRawSelection(napi_env env, napi_callback_info info)
666 {
667 napi_value thiz = nullptr;
668 napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr);
669 auto nativePredicates = GetNativePredicates(env, info);
670 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
671 bool out = nativePredicates->IsRawSelection();
672 return JSUtils::Convert2JSValue(env, out);
673 }
674
GetPredicates() const675 std::shared_ptr<NativeRdb::DataAbilityPredicates> DataAbilityPredicatesProxy::GetPredicates() const
676 {
677 return this->predicates_;
678 }
679
GetWhereClause(napi_env env,napi_callback_info info)680 napi_value DataAbilityPredicatesProxy::GetWhereClause(napi_env env, napi_callback_info info)
681 {
682 auto nativePredicates = GetNativePredicates(env, info);
683 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
684 auto ret = nativePredicates->GetWhereClause();
685 return JSUtils::Convert2JSValue(env, ret);
686 }
687
SetWhereClause(napi_env env,napi_callback_info info)688 napi_value DataAbilityPredicatesProxy::SetWhereClause(napi_env env, napi_callback_info info)
689 {
690 napi_value thiz = nullptr;
691 size_t argc = 1;
692 napi_value args[1] = { 0 };
693 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
694 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::SetWhereClause Invalid argvs!");
695
696 std::string whereClause;
697 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], whereClause) == napi_ok, "whereClause is invalid");
698
699 auto nativePredicates = GetNativePredicates(env, info);
700 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
701 nativePredicates->SetWhereClause(whereClause);
702
703 return thiz;
704 }
705
GetWhereArgs(napi_env env,napi_callback_info info)706 napi_value DataAbilityPredicatesProxy::GetWhereArgs(napi_env env, napi_callback_info info)
707 {
708 auto nativePredicates = GetNativePredicates(env, info);
709 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
710 auto ret = nativePredicates->GetWhereArgs();
711 return JSUtils::Convert2JSValue(env, ret);
712 }
713
SetWhereArgs(napi_env env,napi_callback_info info)714 napi_value DataAbilityPredicatesProxy::SetWhereArgs(napi_env env, napi_callback_info info)
715 {
716 napi_value thiz = nullptr;
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 > 0, "DataAbilityPredicatesProxy::SetWhereArgs Invalid argvs!");
721
722 std::vector<std::string> whereArgs;
723 NAPI_ASSERT(env, JSUtils::Convert2Value(env, args[0], whereArgs) == napi_ok, "Invalid whereArgs!");
724
725 auto nativePredicates = GetNativePredicates(env, info);
726 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
727 nativePredicates->SetWhereArgs(whereArgs);
728
729 return thiz;
730 }
731
GetOrder(napi_env env,napi_callback_info info)732 napi_value DataAbilityPredicatesProxy::GetOrder(napi_env env, napi_callback_info info)
733 {
734 auto nativePredicates = GetNativePredicates(env, info);
735 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
736 auto ret = nativePredicates->GetOrder();
737 return JSUtils::Convert2JSValue(env, ret);
738 }
739
SetOrder(napi_env env,napi_callback_info info)740 napi_value DataAbilityPredicatesProxy::SetOrder(napi_env env, napi_callback_info info)
741 {
742 napi_value thiz = nullptr;
743 size_t argc = 1;
744 napi_value args[1] = { 0 };
745 napi_get_cb_info(env, info, &argc, args, &thiz, nullptr);
746 NAPI_ASSERT(env, argc > 0, "DataAbilityPredicatesProxy::SetOrder Invalid argvs!");
747
748 std::string order;
749 RDB_CHECK_RETURN_NULLPTR(JSUtils::Convert2Value(env, args[0], order) != napi_ok, "the order is invalid");
750
751 auto nativePredicates = GetNativePredicates(env, info);
752 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
753 nativePredicates->SetOrder(order);
754
755 return thiz;
756 }
757
GetLimit(napi_env env,napi_callback_info info)758 napi_value DataAbilityPredicatesProxy::GetLimit(napi_env env, napi_callback_info info)
759 {
760 auto nativePredicates = GetNativePredicates(env, info);
761 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
762 return JSUtils::Convert2JSValue(env, nativePredicates->GetLimit());
763 }
764
GetOffset(napi_env env,napi_callback_info info)765 napi_value DataAbilityPredicatesProxy::GetOffset(napi_env env, napi_callback_info info)
766 {
767 auto nativePredicates = GetNativePredicates(env, info);
768 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
769 return JSUtils::Convert2JSValue(env, nativePredicates->GetOffset());
770 }
771
IsDistinct(napi_env env,napi_callback_info info)772 napi_value DataAbilityPredicatesProxy::IsDistinct(napi_env env, napi_callback_info info)
773 {
774 auto nativePredicates = GetNativePredicates(env, info);
775 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
776 return JSUtils::Convert2JSValue(env, nativePredicates->IsDistinct());
777 }
778
GetGroup(napi_env env,napi_callback_info info)779 napi_value DataAbilityPredicatesProxy::GetGroup(napi_env env, napi_callback_info info)
780 {
781 auto nativePredicates = GetNativePredicates(env, info);
782 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
783 auto ret = nativePredicates->GetGroup();
784 return JSUtils::Convert2JSValue(env, ret);
785 }
786
GetIndex(napi_env env,napi_callback_info info)787 napi_value DataAbilityPredicatesProxy::GetIndex(napi_env env, napi_callback_info info)
788 {
789 auto nativePredicates = GetNativePredicates(env, info);
790 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
791 auto ret = nativePredicates->GetIndex();
792 return JSUtils::Convert2JSValue(env, ret);
793 }
794
IsNeedAnd(napi_env env,napi_callback_info info)795 napi_value DataAbilityPredicatesProxy::IsNeedAnd(napi_env env, napi_callback_info info)
796 {
797 auto nativePredicates = GetNativePredicates(env, info);
798 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
799 return JSUtils::Convert2JSValue(env, nativePredicates->IsNeedAnd());
800 }
801
IsSorted(napi_env env,napi_callback_info info)802 napi_value DataAbilityPredicatesProxy::IsSorted(napi_env env, napi_callback_info info)
803 {
804 auto nativePredicates = GetNativePredicates(env, info);
805 RDB_CHECK_RETURN_NULLPTR(nativePredicates != nullptr, "GetNativePredicates return nullptr");
806 return JSUtils::Convert2JSValue(env, nativePredicates->IsSorted());
807 }
808 } // namespace DataAbilityJsKit
809 } // namespace OHOS
810
811 EXTERN_C_START
NAPI_OHOS_Data_DataAbilityJsKit_DataAbilityPredicatesProxy_NewInstance(napi_env env,DataAbilityPredicates * predicates)812 API_EXPORT napi_value NAPI_OHOS_Data_DataAbilityJsKit_DataAbilityPredicatesProxy_NewInstance(napi_env env,
813 DataAbilityPredicates *predicates)
814 {
815 return OHOS::DataAbilityJsKit::DataAbilityPredicatesProxy::NewInstance(
816 env, std::shared_ptr<DataAbilityPredicates>(predicates));
817 }
818
NAPI_OHOS_Data_DataAbilityJsKit_DataAbilityPredicatesProxy_GetNativeObject(const napi_env env,const napi_value arg)819 API_EXPORT DataAbilityPredicates *NAPI_OHOS_Data_DataAbilityJsKit_DataAbilityPredicatesProxy_GetNativeObject(
820 const napi_env env, const napi_value arg)
821 {
822 auto predicates = OHOS::DataAbilityJsKit::DataAbilityPredicatesProxy::GetNativePredicates(env, arg);
823 return predicates.get();
824 }
825 EXTERN_C_END