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