1 /*
2 * Copyright (c) 2023 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 <iostream>
16 #include <stdio.h>
17 #include <unistd.h>
18 #include <string>
19 #include <string.h>
20 #include <cstdio>
21 #include <cstdlib>
22 #include <fcntl.h>
23 #include <securec.h>
24 #include <sys/stat.h>
25 #include <sys/types.h>
26
27 #include "napi/native_api.h"
28 #include "common/common.h"
29 #include "relational_store.h"
30 #include "relational_store_error_code.h"
31 #include "oh_cursor.h"
32 #include "oh_predicates.h"
33 #include "oh_value_object.h"
34 #include "oh_values_bucket.h"
35
36
37 char *RDB_TEST_PATH = NULL;
38 char RDB_STORE_NAME[] = "rdb_store_test.db";
39 char BUNDLE_NAME[] = "com.acts.rdb.napitest";
40 char MODULE_NAME[] = "com.acts.rdb.napitest";
41 OH_Rdb_Store *storeLevelTestRdbStore_ = NULL;
42 static OH_Rdb_Config config1_;
43 static OH_Rdb_Config config2_;
44 static OH_Rdb_Config config3_;
45 static OH_Rdb_Config config4_;
46 static OH_Rdb_Config config_EL1;
47 static OH_Rdb_Config config_EL2;
48 static OH_Rdb_Config config_EL3;
49 static OH_Rdb_Config config_EL4;
InitRdbConfig1()50 static void InitRdbConfig1()
51 {
52 config1_.dataBaseDir = RDB_TEST_PATH;
53 config1_.storeName = RDB_STORE_NAME;
54 config1_.bundleName = BUNDLE_NAME;
55 config1_.moduleName = MODULE_NAME;
56 config1_.securityLevel = OH_Rdb_SecurityLevel::S1;
57 config1_.isEncrypt = false;
58 config1_.selfSize = sizeof(OH_Rdb_Config);
59 }
60
InitRdbConfig2()61 static void InitRdbConfig2()
62 {
63 config2_.dataBaseDir = RDB_TEST_PATH;
64 config2_.storeName = RDB_STORE_NAME;
65 config2_.bundleName = BUNDLE_NAME;
66 config2_.moduleName = MODULE_NAME;
67 config2_.securityLevel = OH_Rdb_SecurityLevel::S2;
68 config2_.isEncrypt = false;
69 config2_.selfSize = sizeof(OH_Rdb_Config);
70 }
71
InitRdbConfig3()72 static void InitRdbConfig3()
73 {
74 config3_.dataBaseDir = RDB_TEST_PATH;
75 config3_.storeName = RDB_STORE_NAME;
76 config3_.bundleName = BUNDLE_NAME;
77 config3_.moduleName = MODULE_NAME;
78 config3_.securityLevel = OH_Rdb_SecurityLevel::S3;
79 config3_.isEncrypt = false;
80 config3_.selfSize = sizeof(OH_Rdb_Config);
81 }
82
InitRdbConfig4()83 static void InitRdbConfig4()
84 {
85 config4_.dataBaseDir = RDB_TEST_PATH;
86 config4_.storeName = RDB_STORE_NAME;
87 config4_.bundleName = BUNDLE_NAME;
88 config4_.moduleName = MODULE_NAME;
89 config4_.securityLevel = OH_Rdb_SecurityLevel::S4;
90 config4_.isEncrypt = false;
91 config4_.selfSize = sizeof(OH_Rdb_Config);
92 }
93
InitRdbConfig_EL1()94 static void InitRdbConfig_EL1()
95 {
96 config_EL1.dataBaseDir = RDB_TEST_PATH;
97 config_EL1.storeName = RDB_STORE_NAME;
98 config_EL1.bundleName = BUNDLE_NAME;
99 config_EL1.moduleName = MODULE_NAME;
100 config_EL1.securityLevel = OH_Rdb_SecurityLevel::S1;
101 config_EL1.isEncrypt = false;
102 config_EL1.area = Rdb_SecurityArea::RDB_SECURITY_AREA_EL1;
103 config_EL1.selfSize = sizeof(OH_Rdb_Config);
104 }
105
InitRdbConfig_EL2()106 static void InitRdbConfig_EL2()
107 {
108 config_EL2.dataBaseDir = RDB_TEST_PATH;
109 config_EL2.storeName = RDB_STORE_NAME;
110 config_EL2.bundleName = BUNDLE_NAME;
111 config_EL2.moduleName = MODULE_NAME;
112 config_EL2.securityLevel = OH_Rdb_SecurityLevel::S1;
113 config_EL2.isEncrypt = false;
114 config_EL2.area = Rdb_SecurityArea::RDB_SECURITY_AREA_EL2;
115 config_EL2.selfSize = sizeof(OH_Rdb_Config);
116 }
117
InitRdbConfig_EL3()118 static void InitRdbConfig_EL3()
119 {
120 config_EL3.dataBaseDir = RDB_TEST_PATH;
121 config_EL3.storeName = RDB_STORE_NAME;
122 config_EL3.bundleName = BUNDLE_NAME;
123 config_EL3.moduleName = MODULE_NAME;
124 config_EL3.securityLevel = OH_Rdb_SecurityLevel::S1;
125 config_EL3.isEncrypt = false;
126 config_EL3.area = Rdb_SecurityArea::RDB_SECURITY_AREA_EL3;
127 config_EL3.selfSize = sizeof(OH_Rdb_Config);
128 }
129
InitRdbConfig_EL4()130 static void InitRdbConfig_EL4()
131 {
132 config_EL4.dataBaseDir = RDB_TEST_PATH;
133 config_EL4.storeName = RDB_STORE_NAME;
134 config_EL4.bundleName = BUNDLE_NAME;
135 config_EL4.moduleName = MODULE_NAME;
136 config_EL4.securityLevel = OH_Rdb_SecurityLevel::S1;
137 config_EL4.isEncrypt = false;
138 config_EL4.area = Rdb_SecurityArea::RDB_SECURITY_AREA_EL4;
139 config_EL4.selfSize = sizeof(OH_Rdb_Config);
140 }
141
RdbFilePath(napi_env env,napi_callback_info info)142 static napi_value RdbFilePath(napi_env env, napi_callback_info info) {
143 int errCode = 0;
144 size_t argc = 1;
145 napi_value args[1] = {nullptr};
146 napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
147
148 size_t bufferSize = 0;
149 napi_get_value_string_latin1(env, args[0], nullptr, 0, &bufferSize);
150
151 char *buffer = (char*)malloc((bufferSize) + 1);
152 napi_get_value_string_utf8(env, args[0], buffer, bufferSize+1, &bufferSize);
153
154 RDB_TEST_PATH = (char*)malloc((bufferSize) + 1);
155 sprintf(RDB_TEST_PATH, "%s", buffer);
156
157 napi_value returnCode;
158 napi_create_double(env, errCode, &returnCode);
159 return returnCode;
160 }
161
SUB_DDM_RDB_LEVEL_0100(napi_env env,napi_callback_info info)162 static napi_value SUB_DDM_RDB_LEVEL_0100(napi_env env, napi_callback_info info) {
163 InitRdbConfig1();
164 mkdir(config1_.dataBaseDir, 0770);
165 int errCode = 0;
166 storeLevelTestRdbStore_ = OH_Rdb_GetOrOpen(&config1_, &errCode);
167 NAPI_ASSERT(env, errCode == 0, "getRdbStore is fail.");
168
169 char createTableSql[] = "CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 TEXT, data2 INTEGER, "
170 "data3 FLOAT, data4 BLOB, data5 TEXT);";
171
172 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, createTableSql);
173 NAPI_ASSERT(env, errCode == 0, "createTable is fail.");
174
175 OH_VBucket* valueBucket = OH_Rdb_CreateValuesBucket();
176 valueBucket->putInt64(valueBucket, "id", 1);
177 valueBucket->putText(valueBucket, "data1", "zhangSan");
178 valueBucket->putInt64(valueBucket, "data2", 12800);
179 valueBucket->putReal(valueBucket, "data3", 100.1);
180 uint8_t arr[] = {1, 2, 3, 4, 5};
181 int len = sizeof(arr) / sizeof(arr[0]);
182 valueBucket->putBlob(valueBucket, "data4", arr, len);
183 valueBucket->putText(valueBucket, "data5", "ABCDEFG");
184
185 errCode = OH_Rdb_Insert(storeLevelTestRdbStore_, "test", valueBucket);
186 NAPI_ASSERT(env, errCode == 1, "OH_Rdb_Insert is fail.");
187
188 char querySql[] = "SELECT * FROM test";
189 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(storeLevelTestRdbStore_, querySql);
190
191 int rowCount = 0;
192 cursor->getRowCount(cursor, &rowCount);
193 NAPI_ASSERT(env, rowCount == 1, "getRowCount is fail.");
194
195 valueBucket->destroy(valueBucket);
196 cursor->destroy(cursor);
197
198 char dropTableSql[] = "DROP TABLE IF EXISTS test";
199 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, dropTableSql);
200 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_Execute is fail.");
201 errCode = OH_Rdb_CloseStore(storeLevelTestRdbStore_);
202 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_CloseStore is fail.");
203 errCode = OH_Rdb_DeleteStore(&config1_);
204 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_DeleteStore is fail.");
205
206 napi_value returnCode;
207 napi_create_double(env, errCode, &returnCode);
208 return returnCode;
209 }
210
SUB_DDM_RDB_LEVEL_0200(napi_env env,napi_callback_info info)211 static napi_value SUB_DDM_RDB_LEVEL_0200(napi_env env, napi_callback_info info) {
212 InitRdbConfig2();
213 mkdir(config2_.dataBaseDir, 0770);
214 int errCode = 0;
215 storeLevelTestRdbStore_ = OH_Rdb_GetOrOpen(&config2_, &errCode);
216 NAPI_ASSERT(env, errCode == 0, "getRdbStore is fail.");
217
218 char createTableSql[] = "CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 TEXT, data2 INTEGER, "
219 "data3 FLOAT, data4 BLOB, data5 TEXT);";
220
221 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, createTableSql);
222 NAPI_ASSERT(env, errCode == 0, "createTable is fail.");
223
224 OH_VBucket* valueBucket = OH_Rdb_CreateValuesBucket();
225 valueBucket->putInt64(valueBucket, "id", 1);
226 valueBucket->putText(valueBucket, "data1", "zhangSan");
227 valueBucket->putInt64(valueBucket, "data2", 12800);
228 valueBucket->putReal(valueBucket, "data3", 100.1);
229 uint8_t arr[] = {1, 2, 3, 4, 5};
230 int len = sizeof(arr) / sizeof(arr[0]);
231 valueBucket->putBlob(valueBucket, "data4", arr, len);
232 valueBucket->putText(valueBucket, "data5", "ABCDEFG");
233
234 errCode = OH_Rdb_Insert(storeLevelTestRdbStore_, "test", valueBucket);
235 NAPI_ASSERT(env, errCode == 1, "OH_Rdb_Insert is fail.");
236
237 char querySql[] = "SELECT * FROM test";
238 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(storeLevelTestRdbStore_, querySql);
239
240 int rowCount = 0;
241 cursor->getRowCount(cursor, &rowCount);
242 NAPI_ASSERT(env, rowCount == 1, "getRowCount is fail.");
243
244 valueBucket->destroy(valueBucket);
245 cursor->destroy(cursor);
246
247 char dropTableSql[] = "DROP TABLE IF EXISTS test";
248 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, dropTableSql);
249 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_Execute is fail.");
250 errCode = OH_Rdb_CloseStore(storeLevelTestRdbStore_);
251 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_CloseStore is fail.");
252 errCode = OH_Rdb_DeleteStore(&config2_);
253 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_DeleteStore is fail.");
254
255 napi_value returnCode;
256 napi_create_double(env, errCode, &returnCode);
257 return returnCode;
258 }
259
SUB_DDM_RDB_LEVEL_0300(napi_env env,napi_callback_info info)260 static napi_value SUB_DDM_RDB_LEVEL_0300(napi_env env, napi_callback_info info) {
261 InitRdbConfig3();
262 mkdir(config3_.dataBaseDir, 0770);
263 int errCode = 0;
264 storeLevelTestRdbStore_ = OH_Rdb_GetOrOpen(&config3_, &errCode);
265 NAPI_ASSERT(env, errCode == 0, "getRdbStore is fail.");
266
267 char createTableSql[] = "CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 TEXT, data2 INTEGER, "
268 "data3 FLOAT, data4 BLOB, data5 TEXT);";
269
270 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, createTableSql);
271 NAPI_ASSERT(env, errCode == 0, "createTable is fail.");
272
273 OH_VBucket* valueBucket = OH_Rdb_CreateValuesBucket();
274 valueBucket->putInt64(valueBucket, "id", 1);
275 valueBucket->putText(valueBucket, "data1", "zhangSan");
276 valueBucket->putInt64(valueBucket, "data2", 12800);
277 valueBucket->putReal(valueBucket, "data3", 100.1);
278 uint8_t arr[] = {1, 2, 3, 4, 5};
279 int len = sizeof(arr) / sizeof(arr[0]);
280 valueBucket->putBlob(valueBucket, "data4", arr, len);
281 valueBucket->putText(valueBucket, "data5", "ABCDEFG");
282
283 errCode = OH_Rdb_Insert(storeLevelTestRdbStore_, "test", valueBucket);
284 NAPI_ASSERT(env, errCode == 1, "OH_Rdb_Insert is fail.");
285
286 char querySql[] = "SELECT * FROM test";
287 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(storeLevelTestRdbStore_, querySql);
288
289 int rowCount = 0;
290 cursor->getRowCount(cursor, &rowCount);
291 NAPI_ASSERT(env, rowCount == 1, "getRowCount is fail.");
292
293 valueBucket->destroy(valueBucket);
294 cursor->destroy(cursor);
295
296 char dropTableSql[] = "DROP TABLE IF EXISTS test";
297 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, dropTableSql);
298 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_Execute is fail.");
299 errCode = OH_Rdb_CloseStore(storeLevelTestRdbStore_);
300 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_CloseStore is fail.");
301 errCode = OH_Rdb_DeleteStore(&config3_);
302 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_DeleteStore is fail.");
303
304 napi_value returnCode;
305 napi_create_double(env, errCode, &returnCode);
306 return returnCode;
307 }
308
SUB_DDM_RDB_LEVEL_0400(napi_env env,napi_callback_info info)309 static napi_value SUB_DDM_RDB_LEVEL_0400(napi_env env, napi_callback_info info) {
310 InitRdbConfig4();
311 mkdir(config4_.dataBaseDir, 0770);
312 int errCode = 0;
313 storeLevelTestRdbStore_ = OH_Rdb_GetOrOpen(&config4_, &errCode);
314 NAPI_ASSERT(env, errCode == 0, "getRdbStore is fail.");
315
316 char createTableSql[] = "CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 TEXT, data2 INTEGER, "
317 "data3 FLOAT, data4 BLOB, data5 TEXT);";
318
319 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, createTableSql);
320 NAPI_ASSERT(env, errCode == 0, "createTable is fail.");
321
322 OH_VBucket* valueBucket = OH_Rdb_CreateValuesBucket();
323 valueBucket->putInt64(valueBucket, "id", 1);
324 valueBucket->putText(valueBucket, "data1", "zhangSan");
325 valueBucket->putInt64(valueBucket, "data2", 12800);
326 valueBucket->putReal(valueBucket, "data3", 100.1);
327 uint8_t arr[] = {1, 2, 3, 4, 5};
328 int len = sizeof(arr) / sizeof(arr[0]);
329 valueBucket->putBlob(valueBucket, "data4", arr, len);
330 valueBucket->putText(valueBucket, "data5", "ABCDEFG");
331
332 errCode = OH_Rdb_Insert(storeLevelTestRdbStore_, "test", valueBucket);
333 NAPI_ASSERT(env, errCode == 1, "OH_Rdb_Insert is fail.");
334
335 char querySql[] = "SELECT * FROM test";
336 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(storeLevelTestRdbStore_, querySql);
337
338 int rowCount = 0;
339 cursor->getRowCount(cursor, &rowCount);
340 NAPI_ASSERT(env, rowCount == 1, "getRowCount is fail.");
341
342 valueBucket->destroy(valueBucket);
343 cursor->destroy(cursor);
344
345 char dropTableSql[] = "DROP TABLE IF EXISTS test";
346 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, dropTableSql);
347 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_Execute is fail.");
348 errCode = OH_Rdb_CloseStore(storeLevelTestRdbStore_);
349 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_CloseStore is fail.");
350 errCode = OH_Rdb_DeleteStore(&config4_);
351 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_DeleteStore is fail.");
352
353 napi_value returnCode;
354 napi_create_double(env, errCode, &returnCode);
355 return returnCode;
356 }
357
SUB_DDM_RDB_LEVEL_EL_0100(napi_env env,napi_callback_info info)358 static napi_value SUB_DDM_RDB_LEVEL_EL_0100(napi_env env, napi_callback_info info) {
359 InitRdbConfig_EL1();
360 mkdir(config_EL1.dataBaseDir, 0770);
361 int errCode = 0;
362 storeLevelTestRdbStore_ = OH_Rdb_GetOrOpen(&config_EL1, &errCode);
363 NAPI_ASSERT(env, errCode == 0, "getRdbStore is fail.");
364
365 char createTableSql[] = "CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 TEXT, data2 INTEGER, "
366 "data3 FLOAT, data4 BLOB, data5 TEXT);";
367
368 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, createTableSql);
369 NAPI_ASSERT(env, errCode == 0, "createTable is fail.");
370
371 OH_VBucket* valueBucket = OH_Rdb_CreateValuesBucket();
372 valueBucket->putInt64(valueBucket, "id", 1);
373 valueBucket->putText(valueBucket, "data1", "zhangSan");
374 valueBucket->putInt64(valueBucket, "data2", 12800);
375 valueBucket->putReal(valueBucket, "data3", 100.1);
376 uint8_t arr[] = {1, 2, 3, 4, 5};
377 int len = sizeof(arr) / sizeof(arr[0]);
378 valueBucket->putBlob(valueBucket, "data4", arr, len);
379 valueBucket->putText(valueBucket, "data5", "ABCDEFG");
380
381 errCode = OH_Rdb_Insert(storeLevelTestRdbStore_, "test", valueBucket);
382 NAPI_ASSERT(env, errCode == 1, "OH_Rdb_Insert is fail.");
383
384 char querySql[] = "SELECT * FROM test";
385 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(storeLevelTestRdbStore_, querySql);
386
387 int rowCount = 0;
388 cursor->getRowCount(cursor, &rowCount);
389 NAPI_ASSERT(env, rowCount == 1, "getRowCount is fail.");
390
391 valueBucket->destroy(valueBucket);
392 cursor->destroy(cursor);
393
394 char dropTableSql[] = "DROP TABLE IF EXISTS test";
395 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, dropTableSql);
396 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_Execute is fail.");
397 errCode = OH_Rdb_CloseStore(storeLevelTestRdbStore_);
398 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_CloseStore is fail.");
399 errCode = OH_Rdb_DeleteStore(&config_EL1);
400 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_DeleteStore is fail.");
401
402 napi_value returnCode;
403 napi_create_double(env, errCode, &returnCode);
404 return returnCode;
405 }
SUB_DDM_RDB_LEVEL_EL_0200(napi_env env,napi_callback_info info)406 static napi_value SUB_DDM_RDB_LEVEL_EL_0200(napi_env env, napi_callback_info info) {
407 InitRdbConfig_EL2();
408 mkdir(config_EL2.dataBaseDir, 0770);
409 int errCode = 0;
410 storeLevelTestRdbStore_ = OH_Rdb_GetOrOpen(&config_EL2, &errCode);
411 NAPI_ASSERT(env, errCode == 0, "getRdbStore is fail.");
412
413 char createTableSql[] = "CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 TEXT, data2 INTEGER, "
414 "data3 FLOAT, data4 BLOB, data5 TEXT);";
415
416 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, createTableSql);
417 NAPI_ASSERT(env, errCode == 0, "createTable is fail.");
418
419 OH_VBucket* valueBucket = OH_Rdb_CreateValuesBucket();
420 valueBucket->putInt64(valueBucket, "id", 1);
421 valueBucket->putText(valueBucket, "data1", "zhangSan");
422 valueBucket->putInt64(valueBucket, "data2", 12800);
423 valueBucket->putReal(valueBucket, "data3", 100.1);
424 uint8_t arr[] = {1, 2, 3, 4, 5};
425 int len = sizeof(arr) / sizeof(arr[0]);
426 valueBucket->putBlob(valueBucket, "data4", arr, len);
427 valueBucket->putText(valueBucket, "data5", "ABCDEFG");
428
429 errCode = OH_Rdb_Insert(storeLevelTestRdbStore_, "test", valueBucket);
430 NAPI_ASSERT(env, errCode == 1, "OH_Rdb_Insert is fail.");
431
432 char querySql[] = "SELECT * FROM test";
433 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(storeLevelTestRdbStore_, querySql);
434
435 int rowCount = 0;
436 cursor->getRowCount(cursor, &rowCount);
437 NAPI_ASSERT(env, rowCount == 1, "getRowCount is fail.");
438
439 valueBucket->destroy(valueBucket);
440 cursor->destroy(cursor);
441
442 char dropTableSql[] = "DROP TABLE IF EXISTS test";
443 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, dropTableSql);
444 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_Execute is fail.");
445 errCode = OH_Rdb_CloseStore(storeLevelTestRdbStore_);
446 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_CloseStore is fail.");
447 errCode = OH_Rdb_DeleteStore(&config_EL2);
448 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_DeleteStore is fail.");
449
450 napi_value returnCode;
451 napi_create_double(env, errCode, &returnCode);
452 return returnCode;
453 }
454
SUB_DDM_RDB_LEVEL_EL_0300(napi_env env,napi_callback_info info)455 static napi_value SUB_DDM_RDB_LEVEL_EL_0300(napi_env env, napi_callback_info info) {
456 InitRdbConfig_EL3();
457 mkdir(config_EL3.dataBaseDir, 0770);
458 int errCode = 0;
459 storeLevelTestRdbStore_ = OH_Rdb_GetOrOpen(&config_EL3, &errCode);
460 NAPI_ASSERT(env, errCode == 0, "getRdbStore is fail.");
461
462 char createTableSql[] = "CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 TEXT, data2 INTEGER, "
463 "data3 FLOAT, data4 BLOB, data5 TEXT);";
464
465 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, createTableSql);
466 NAPI_ASSERT(env, errCode == 0, "createTable is fail.");
467
468 OH_VBucket* valueBucket = OH_Rdb_CreateValuesBucket();
469 valueBucket->putInt64(valueBucket, "id", 1);
470 valueBucket->putText(valueBucket, "data1", "zhangSan");
471 valueBucket->putInt64(valueBucket, "data2", 12800);
472 valueBucket->putReal(valueBucket, "data3", 100.1);
473 uint8_t arr[] = {1, 2, 3, 4, 5};
474 int len = sizeof(arr) / sizeof(arr[0]);
475 valueBucket->putBlob(valueBucket, "data4", arr, len);
476 valueBucket->putText(valueBucket, "data5", "ABCDEFG");
477
478 errCode = OH_Rdb_Insert(storeLevelTestRdbStore_, "test", valueBucket);
479 NAPI_ASSERT(env, errCode == 1, "OH_Rdb_Insert is fail.");
480
481 char querySql[] = "SELECT * FROM test";
482 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(storeLevelTestRdbStore_, querySql);
483
484 int rowCount = 0;
485 cursor->getRowCount(cursor, &rowCount);
486 NAPI_ASSERT(env, rowCount == 1, "getRowCount is fail.");
487
488 valueBucket->destroy(valueBucket);
489 cursor->destroy(cursor);
490
491 char dropTableSql[] = "DROP TABLE IF EXISTS test";
492 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, dropTableSql);
493 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_Execute is fail.");
494 errCode = OH_Rdb_CloseStore(storeLevelTestRdbStore_);
495 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_CloseStore is fail.");
496 errCode = OH_Rdb_DeleteStore(&config_EL3);
497 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_DeleteStore is fail.");
498
499 napi_value returnCode;
500 napi_create_double(env, errCode, &returnCode);
501 return returnCode;
502 }
503
SUB_DDM_RDB_LEVEL_EL_0400(napi_env env,napi_callback_info info)504 static napi_value SUB_DDM_RDB_LEVEL_EL_0400(napi_env env, napi_callback_info info) {
505 InitRdbConfig_EL4();
506 mkdir(config_EL4.dataBaseDir, 0770);
507 int errCode = 0;
508 storeLevelTestRdbStore_ = OH_Rdb_GetOrOpen(&config_EL4, &errCode);
509 NAPI_ASSERT(env, errCode == 0, "getRdbStore is fail.");
510
511 char createTableSql[] = "CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 TEXT, data2 INTEGER, "
512 "data3 FLOAT, data4 BLOB, data5 TEXT);";
513
514 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, createTableSql);
515 NAPI_ASSERT(env, errCode == 0, "createTable is fail.");
516
517 OH_VBucket* valueBucket = OH_Rdb_CreateValuesBucket();
518 valueBucket->putInt64(valueBucket, "id", 1);
519 valueBucket->putText(valueBucket, "data1", "zhangSan");
520 valueBucket->putInt64(valueBucket, "data2", 12800);
521 valueBucket->putReal(valueBucket, "data3", 100.1);
522 uint8_t arr[] = {1, 2, 3, 4, 5};
523 int len = sizeof(arr) / sizeof(arr[0]);
524 valueBucket->putBlob(valueBucket, "data4", arr, len);
525 valueBucket->putText(valueBucket, "data5", "ABCDEFG");
526
527 errCode = OH_Rdb_Insert(storeLevelTestRdbStore_, "test", valueBucket);
528 NAPI_ASSERT(env, errCode == 1, "OH_Rdb_Insert is fail.");
529
530 char querySql[] = "SELECT * FROM test";
531 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(storeLevelTestRdbStore_, querySql);
532
533 int rowCount = 0;
534 cursor->getRowCount(cursor, &rowCount);
535 NAPI_ASSERT(env, rowCount == 1, "getRowCount is fail.");
536
537 valueBucket->destroy(valueBucket);
538 cursor->destroy(cursor);
539
540 char dropTableSql[] = "DROP TABLE IF EXISTS test";
541 errCode = OH_Rdb_Execute(storeLevelTestRdbStore_, dropTableSql);
542 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_Execute is fail.");
543 errCode = OH_Rdb_CloseStore(storeLevelTestRdbStore_);
544 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_CloseStore is fail.");
545 errCode = OH_Rdb_DeleteStore(&config_EL4);
546 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_DeleteStore is fail.");
547
548 napi_value returnCode;
549 napi_create_double(env, errCode, &returnCode);
550 return returnCode;
551 }
552
553
554 EXTERN_C_START
Init(napi_env env,napi_value exports)555 static napi_value Init(napi_env env, napi_value exports) {
556 napi_property_descriptor desc[] = {
557 {"RdbFilePath", nullptr, RdbFilePath, nullptr, nullptr, nullptr, napi_default, nullptr},
558 {"SUB_DDM_RDB_LEVEL_0100", nullptr, SUB_DDM_RDB_LEVEL_0100, nullptr, nullptr, nullptr, napi_default, nullptr},
559 {"SUB_DDM_RDB_LEVEL_0200", nullptr, SUB_DDM_RDB_LEVEL_0200, nullptr, nullptr, nullptr, napi_default, nullptr},
560 {"SUB_DDM_RDB_LEVEL_0300", nullptr, SUB_DDM_RDB_LEVEL_0300, nullptr, nullptr, nullptr, napi_default, nullptr},
561 {"SUB_DDM_RDB_LEVEL_0400", nullptr, SUB_DDM_RDB_LEVEL_0400, nullptr, nullptr, nullptr, napi_default, nullptr},
562 {"SUB_DDM_RDB_LEVEL_EL_0100", nullptr, SUB_DDM_RDB_LEVEL_EL_0100, nullptr, nullptr, nullptr, napi_default, nullptr},
563 {"SUB_DDM_RDB_LEVEL_EL_0200", nullptr, SUB_DDM_RDB_LEVEL_EL_0200, nullptr, nullptr, nullptr, napi_default, nullptr},
564 {"SUB_DDM_RDB_LEVEL_EL_0300", nullptr, SUB_DDM_RDB_LEVEL_EL_0300, nullptr, nullptr, nullptr, napi_default, nullptr},
565 {"SUB_DDM_RDB_LEVEL_EL_0400", nullptr, SUB_DDM_RDB_LEVEL_EL_0400, nullptr, nullptr, nullptr, napi_default, nullptr}
566 };
567 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
568 return exports;
569 }
570 EXTERN_C_END
571
572 static napi_module demoModule = {
573 .nm_version = 1,
574 .nm_flags = 0,
575 .nm_filename = nullptr,
576 .nm_register_func = Init,
577 .nm_modname = "level",
578 .nm_priv = ((void *)0),
579 .reserved = {0},
580 };
581
RegisterEntryModule(void)582 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) {
583 napi_module_register(&demoModule);
584 }
585