• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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