1 /*
2 * Copyright (c) 2025 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 <unistd.h>
17 #include "napi/native_api.h"
18 #include "hilog/log.h"
19 #include <string>
20 #include <cstdio>
21 #include <cstdlib>
22 #include <cstring>
23 #include <ctime>
24 #include <cstdint>
25 #include "common.h"
26 #include <sys/stat.h>
27 #include <sys/types.h>
28 #include <thread>
29 #include "database/data/oh_data_value.h"
30 #include "database/data/oh_data_values.h"
31 #include "database/data/oh_data_values_buckets.h"
32 #include "database/rdb/relational_store.h"
33 #include "database/rdb/relational_store_error_code.h"
34 #include "database/rdb/oh_rdb_transaction.h"
35 #include "database/rdb/relational_store_error_code.h"
36 #include "database/rdb/oh_values_bucket.h"
37 #include "database/data/data_asset.h"
38 #include "database/rdb/oh_value_object.h"
39 #include "database/rdb/oh_rdb_types.h"
40 #include "database/rdb/oh_predicates.h"
41 #include "database/rdb/oh_cursor.h"
42
43 #define DIRMODE 0770
44
45 #define WAIT_TIME 3
46
47 const char *TAG = "transaction_ctest";
48 const char *RDB_TEST_PATH = "/data/storage/el2/database/com.example.buchongndktest/entry/";
49 static OH_Rdb_Store *g_transStore;
50 static OH_RDB_TransOptions *g_options;
51 static OH_Rdb_Config config_;
52 OH_Rdb_Store *store_;
53 OH_Rdb_Store *storeTestRdbStore_;
54 float test_[] = { 1.2, 2.3 };
55
InitRdbConfig(napi_env env)56 static OH_Rdb_ConfigV2 *InitRdbConfig(napi_env env)
57 {
58 OH_Rdb_ConfigV2 *config = OH_Rdb_CreateConfig();
59 NAPI_ASSERT(env, config != nullptr, "OH_Rdb_ExecuteQueryV2 is fail.");
60 OH_Rdb_SetDatabaseDir(config, RDB_TEST_PATH);
61 OH_Rdb_SetStoreName(config, "rdb_vector_test.db");
62 OH_Rdb_SetBundleName(config, "com.ohos.example.distributedndk");
63 OH_Rdb_SetEncrypted(config, false);
64 OH_Rdb_SetSecurityLevel(config, OH_Rdb_SecurityLevel::S1);
65 OH_Rdb_SetArea(config, RDB_SECURITY_AREA_EL1);
66 return config;
67 }
68
InitRdbConfig()69 static void InitRdbConfig()
70 {
71 config_.dataBaseDir = RDB_TEST_PATH;
72 config_.storeName = "rdb_store_test.db";
73 config_.bundleName = "com.example.buchongndktest";
74 config_.moduleName = "";
75 config_.securityLevel = OH_Rdb_SecurityLevel::S1;
76 config_.isEncrypt = false;
77 config_.selfSize = sizeof(OH_Rdb_Config);
78 config_.area = RDB_SECURITY_AREA_EL1;
79 }
80
RdbstoreSetUpTestCase(napi_env env,napi_callback_info info)81 static napi_value RdbstoreSetUpTestCase(napi_env env, napi_callback_info info)
82 {
83 InitRdbConfig();
84 int chmodValue = 0770;
85 mkdir(config_.dataBaseDir, chmodValue);
86 int errCode = 0;
87 char table[] = "test";
88 g_transStore = OH_Rdb_GetOrOpen(&config_, &errCode);
89 NAPI_ASSERT(env, g_transStore != NULL, "OH_Rdb_Execute dropTableSql is fail.");
90 char createTableSql[] = "CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 TEXT, data2 INTEGER, "
91 "data3 FLOAT, data4 BLOB, data5 TEXT);";
92 errCode = OH_Rdb_Execute(g_transStore, createTableSql);
93 OH_VBucket *valueBucket = OH_Rdb_CreateValuesBucket();
94 valueBucket->putInt64(valueBucket, "id", 1);
95 valueBucket->putText(valueBucket, "data1", "zhangSan");
96 valueBucket->putInt64(valueBucket, "data2", 12800);
97 valueBucket->putReal(valueBucket, "data3", 100.1);
98 uint8_t arr[] = { 1, 2, 3, 4, 5 };
99 int len = sizeof(arr) / sizeof(arr[0]);
100 valueBucket->putBlob(valueBucket, "data4", arr, len);
101 valueBucket->putText(valueBucket, "data5", "ABCDEFG");
102 errCode = OH_Rdb_Insert(g_transStore, table, valueBucket);
103 const int SUCCESS = 1;
104 NAPI_ASSERT(env, errCode == SUCCESS, "OH_Rdb_Insert is fail.");
105 const int ID = 2;
106 const int PHONE_NUMBER = 13800;
107 const double HEIGHT = 200.1;
108 valueBucket->clear(valueBucket);
109 valueBucket->putInt64(valueBucket, "id", ID);
110 valueBucket->putText(valueBucket, "data1", "liSi");
111 valueBucket->putInt64(valueBucket, "data2", PHONE_NUMBER);
112 valueBucket->putReal(valueBucket, "data3", HEIGHT);
113 valueBucket->putText(valueBucket, "data5", "ABCDEFGH");
114 errCode = OH_Rdb_Insert(g_transStore, table, valueBucket);
115 NAPI_ASSERT(env, errCode == 2, "OH_Rdb_CreateConfig is fail.");
116 valueBucket->clear(valueBucket);
117 valueBucket->putInt64(valueBucket, "id", 3);
118 valueBucket->putText(valueBucket, "data1", "wangWu");
119 const int DATA2_VALUE = 14800;
120 valueBucket->putInt64(valueBucket, "data2", DATA2_VALUE);
121 const double HEIGHT_DATA = 300.1;
122 valueBucket->putReal(valueBucket, "data3", HEIGHT_DATA);
123 valueBucket->putText(valueBucket, "data5", "ABCDEFGHI");
124 errCode = OH_Rdb_Insert(g_transStore, table, valueBucket);
125 NAPI_ASSERT(env, errCode == 3, "OH_Rdb_CreateConfig is fail.");
126 valueBucket->destroy(valueBucket);
127 g_options = OH_RdbTrans_CreateOptions();
128 NAPI_ASSERT(env, g_options != nullptr, "OH_Rdb_CreateConfig is fail.");
129 int ret = OH_RdbTransOption_SetType(g_options, RDB_TRANS_BUTT);
130 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_Rdb_CreateConfig is fail.");
131 ret = OH_RdbTransOption_SetType(g_options, RDB_TRANS_DEFERRED);
132 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
133
134 napi_value result = nullptr;
135 napi_create_int32(env, ret, &result);
136 return result;
137 }
138
RdbstoreTearDownTestCase(napi_env env,napi_callback_info info)139 static napi_value RdbstoreTearDownTestCase(napi_env env, napi_callback_info info)
140 {
141 char dropTableSql[] = "DROP TABLE IF EXISTS test";
142 int errCode = OH_Rdb_Execute(g_transStore, dropTableSql);
143 NAPI_ASSERT(env, errCode == 0, "OH_Rdb_CreateConfig is fail.");
144 delete g_transStore;
145 g_transStore = NULL;
146 OH_Rdb_DeleteStore(&config_);
147 OH_RdbTrans_DestroyOptions(g_options);
148 g_options = nullptr;
149
150 napi_value result = nullptr;
151 napi_create_int32(env, errCode, &result);
152 return result;
153 }
154
FillDataValues(napi_env env,OH_Data_Values * values)155 static void FillDataValues(napi_env env, OH_Data_Values *values)
156 {
157 NAPI_ASSERT_RETURN_VOID(env, values != nullptr, "OH_Rdb_Backup1 is fail.");
158 OH_Data_Value *value = OH_Value_Create();
159 int ret = OH_Value_PutInt(nullptr, 1);
160 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_E_INVALID_ARGS, "OH_Rdb_Backup1 is fail.");
161 ret = OH_Value_PutInt(value, 1);
162 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Backup1 is fail.");
163 ret = OH_Values_Put(nullptr, value);
164 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_E_INVALID_ARGS, "OH_Rdb_Backup1 is fail.");
165 ret = OH_Values_Put(values, nullptr);
166 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_E_INVALID_ARGS, "OH_Rdb_Backup1 is fail.");
167 ret = OH_Values_Put(values, value);
168 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Backup1 is fail.");
169 ret = OH_Value_Destroy(value);
170 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Backup1 is fail.");
171 ret = OH_Values_PutInt(values, 2);
172 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Values_PutInt is fail.");
173 ret = OH_Values_PutReal(values, 1.1);
174 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Values_PutReal is fail.");
175 ret = OH_Values_PutText(values, "1");
176 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Values_PutText is fail.");
177 unsigned char val[] = {1, 2};
178 ret = OH_Values_PutBlob(values, val, sizeof(val) / sizeof(val[0]));
179 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Values_PutBlob is fail.");
180 Data_Asset *asset = OH_Data_Asset_CreateOne();
181 ret = OH_Data_Asset_SetName(asset, "name");
182 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Data_Asset_SetName is fail.");
183 ret = OH_Values_PutAsset(values, asset);
184 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Values_PutAsset is fail.");
185 OH_Data_Asset_DestroyOne(asset);
186 Data_Asset **assets = OH_Data_Asset_CreateMultiple(2);
187 ret = OH_Data_Asset_SetName(assets[0], "name1");
188 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Backup1 is fail.");
189 ret = OH_Data_Asset_SetName(assets[1], "name2");
190 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Backup1 is fail.");
191 const int ASSET_COUNT = 2;
192 ret = OH_Values_PutAssets(values, assets, ASSET_COUNT);
193 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Backup1 is fail.");
194 ret = OH_Data_Asset_DestroyMultiple(assets, 2);
195 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Backup1 is fail.");
196 uint64_t bigInt[] = {1, 2, 3, 4, 5};
197 ret = OH_Values_PutUnlimitedInt(values, 0, bigInt, sizeof(bigInt) / sizeof(bigInt[0]));
198 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Backup1 is fail.");
199 }
200
OH_Rdb_Transaction0100(napi_env env,napi_callback_info info)201 static napi_value OH_Rdb_Transaction0100(napi_env env, napi_callback_info info)
202 {
203 OH_Rdb_Transaction *trans = nullptr;
204 NAPI_ASSERT(env, g_transStore != NULL, "OH_Rdb_Execute g_transStore is fail.");
205 NAPI_ASSERT(env, g_options != NULL, "OH_Rdb_Execute g_options is fail.");
206 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
207 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, "OH_PreferencesOption_SetBundleName2 ret= %{public}d", ret);
208 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateTransaction is fail.");
209 NAPI_ASSERT(env, trans != nullptr, "trans != nullptr is fail.");
210
211 napi_value result;
212 napi_create_int32(env, ret, &result);
213 return result;
214 }
215
OH_Rdb_CreateTransaction0100(napi_env env,napi_callback_info info)216 static napi_value OH_Rdb_CreateTransaction0100(napi_env env, napi_callback_info info)
217 {
218 OH_Rdb_Transaction *trans = nullptr;
219 const char *table = "test";
220 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
221 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateTransaction is fail.");
222 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_CreateTransaction trans is fail.");
223 OH_VBucket *valueBucket = OH_Rdb_CreateValuesBucket();
224 valueBucket->putInt64(valueBucket, "id", 4);
225 valueBucket->putText(valueBucket, "data1", "test_name4");
226 const int DATA2_VALUE = 14800;
227 valueBucket->putInt64(valueBucket, "data2", DATA2_VALUE);
228 const double DATA3_VALUE = 300.1;
229 valueBucket->putReal(valueBucket, "data3", DATA3_VALUE);
230 valueBucket->putText(valueBucket, "data5", "ABCDEFGHI");
231 int64_t rowId = -1;
232 ret = OH_RdbTrans_Insert(trans, table, valueBucket, &rowId);
233 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_Insert is fail.");
234 NAPI_ASSERT(env, rowId == 4, "OH_RdbTrans_Insert is fail.");
235 valueBucket->destroy(valueBucket);
236 ret = OH_RdbTrans_Destroy(trans);
237 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_Destroy is fail.");
238
239 napi_value result;
240 napi_create_int32(env, ret, &result);
241 return result;
242 }
243
OH_RdbTrans_Rollback0100(napi_env env,napi_callback_info info)244 static napi_value OH_RdbTrans_Rollback0100(napi_env env, napi_callback_info info)
245 {
246 OH_Rdb_Transaction *trans = nullptr;
247 const char *table = "test";
248 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
249 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
250 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_CreateConfig is fail.");
251 OH_VBucket *valueBucket = OH_Rdb_CreateValuesBucket();
252 valueBucket->putText(valueBucket, "data1", "test_name4");
253 const int DATA2_VALUE = 14800;
254 valueBucket->putInt64(valueBucket, "data2", DATA2_VALUE);
255 const double DATA3_VALUE = 300.1;
256 valueBucket->putReal(valueBucket, "data3", DATA3_VALUE);
257 valueBucket->putText(valueBucket, "data5", "ABCDEFGHI");
258 int64_t rowId = -1;
259 ret = OH_RdbTrans_Insert(trans, table, valueBucket, &rowId);
260 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
261 NAPI_ASSERT(env, rowId == 4, "OH_Rdb_CreateConfig is fail.");
262 ret = OH_RdbTrans_Rollback(trans);
263 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
264 valueBucket->destroy(valueBucket);
265 ret = OH_RdbTrans_Destroy(trans);
266 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
267
268 napi_value result;
269 napi_create_int32(env, ret, &result);
270 return result;
271 }
272
OH_RdbTrans_Query0100(napi_env env,napi_callback_info info)273 static napi_value OH_RdbTrans_Query0100(napi_env env, napi_callback_info info)
274 {
275 OH_Rdb_Transaction *trans = nullptr;
276 const char *table = "test";
277 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
278 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateTransaction is fail.");
279 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_CreateTransaction is fail.");
280 OH_Predicates *predicates = OH_Rdb_CreatePredicates(table);
281 const char *columns[] = {"id", "data1"};
282 OH_Cursor *cursor = OH_RdbTrans_Query(nullptr, predicates, columns, 2);
283 NAPI_ASSERT(env, cursor == nullptr, "OH_RdbTrans_Query is fail.");
284 cursor = OH_RdbTrans_Query(trans, nullptr, columns, 2);
285 NAPI_ASSERT(env, cursor == nullptr, "OH_RdbTrans_Query is fail.");
286 cursor = OH_RdbTrans_Query(trans, predicates, nullptr, 0);
287 NAPI_ASSERT(env, cursor != nullptr, "OH_Rdb_CreateConfig is fail.");
288 int rowCount = 0;
289 cursor->getRowCount(cursor, &rowCount);
290 NAPI_ASSERT(env, rowCount == 3, "getRowCount is fail.");
291 ret = cursor->goToNextRow(cursor);
292 NAPI_ASSERT(env, ret == 0, "goToNextRow is fail.");
293 int64_t id;
294 cursor->getInt64(cursor, 0, &id);
295 NAPI_ASSERT(env, id == 1, "getInt64 is fail.");
296 char data1[15];
297 cursor->getText(cursor, 1, data1, 15);
298 NAPI_ASSERT(env, strcmp(data1, "zhangSan") == 0, "getInt64 is fail.");
299 int64_t data2;
300 cursor->getInt64(cursor, 2, &data2);
301 NAPI_ASSERT(env, data2 == 12800, "OH_Rdb_CreateConfig is fail.");
302 cursor->destroy(cursor);
303 ret = OH_RdbTrans_Destroy(trans);
304 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
305
306 napi_value result;
307 napi_create_int32(env, ret, &result);
308 return result;
309 }
310
OH_VBuckets_Create0100(napi_env env,napi_callback_info info)311 static napi_value OH_VBuckets_Create0100(napi_env env, napi_callback_info info)
312 {
313 OH_Rdb_Transaction *trans = nullptr;
314 const char *table = "test";
315 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
316 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateTransaction is fail.");
317 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_CreateTransaction is fail.");
318 OH_VBucket *row1 = OH_Rdb_CreateValuesBucket();
319 NAPI_ASSERT(env, row1 != nullptr, "OH_Rdb_CreateValuesBucket is fail.");
320
321 row1->putInt64(row1, "id", 4);
322 row1->putText(row1, "data1", "test_name4");
323 const int DATA2_VALUE = 14800;
324 row1->putInt64(row1, "data2", DATA2_VALUE);
325 const double DATA3_VALUE = 300.1;
326 row1->putReal(row1, "data3", DATA3_VALUE);
327 row1->putText(row1, "data5", "ABCDEFGHI");
328 OH_VBucket *row2 = OH_Rdb_CreateValuesBucket();
329 NAPI_ASSERT(env, row2 != nullptr, "OH_Rdb_CreateValuesBucket is fail.");
330
331 row2->putInt64(row2, "id", 5);
332 row2->putText(row2, "data1", "test_name5");
333 const double DATA4_VALUE = 15800;
334 const double DATA5_VALUE = 500.1;
335 row2->putInt64(row2, "data2", DATA4_VALUE);
336 row2->putReal(row2, "data3", DATA5_VALUE);
337 row2->putText(row2, "data5", "ABCDEFGHI");
338 OH_Data_VBuckets *rows = OH_VBuckets_Create();
339 NAPI_ASSERT(env, rows != nullptr, "OH_VBuckets_Create is fail.");
340 ret = OH_VBuckets_PutRow(rows, row1);
341 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBuckets_PutRow is fail.");
342
343 size_t count = -1;
344 ret = OH_VBuckets_RowCount(rows, &count);
345 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBuckets_RowCount is fail.");
346 NAPI_ASSERT(env, count == 1, "OH_VBuckets_RowCount is fail.");
347 ret = OH_VBuckets_PutRow(rows, row2);
348 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
349 ret = OH_VBuckets_RowCount(rows, &count);
350 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
351 const int EXPECTED_COUNT = 2;
352 NAPI_ASSERT(env, count == EXPECTED_COUNT, "OH_Rdb_CreateConfig is fail.");
353
354 int64_t changes = -1;
355 ret = OH_RdbTrans_BatchInsert(trans, table, rows, RDB_CONFLICT_NONE, &changes);
356 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_BatchInsert is fail.");
357 NAPI_ASSERT(env, changes == 2, "OH_RdbTrans_BatchInsert is fail.");
358 row1->destroy(row1);
359 row2->destroy(row2);
360 ret = OH_VBuckets_Destroy(rows);
361 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBuckets_Destroy is fail.");
362 ret = OH_RdbTrans_Destroy(trans);
363 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_Destroy is fail.");
364
365 napi_value result;
366 napi_create_int32(env, ret, &result);
367 return result;
368 }
369
OH_VBuckets_Destroy0100(napi_env env,napi_callback_info info)370 static napi_value OH_VBuckets_Destroy0100(napi_env env, napi_callback_info info)
371 {
372 OH_Rdb_Transaction *trans = nullptr;
373 const char *table = "test";
374 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
375 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateTransaction is fail.");
376 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, "OH_PreferencesOption_SetFileName(option, "") ret= %{public}d", ret);
377 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_CreateTransaction is fail.");
378 OH_VBucket *row1 = OH_Rdb_CreateValuesBucket();
379 NAPI_ASSERT(env, row1 != nullptr, "OH_Rdb_CreateValuesBucket is fail.");
380 const int USER_ID = 4;
381 row1->putInt64(row1, "id", USER_ID);
382 row1->putText(row1, "data1", "test_name4");
383 const int DATA1_VALUE = 14800;
384 row1->putInt64(row1, "data2", DATA1_VALUE);
385 const double DATA3_VALUE = 300.1;
386 row1->putReal(row1, "data3", DATA3_VALUE);
387 row1->putText(row1, "data5", "ABCDEFGHI");
388 OH_VBucket *row2 = OH_Rdb_CreateValuesBucket();
389 NAPI_ASSERT(env, row2 != nullptr, "OH_Rdb_CreateConfig is fail.");
390 row2->putInt64(row2, "id", 5);
391 row2->putText(row2, "data1", "test_name5");
392 const int DATA2_VALUE = 15800;
393 row2->putInt64(row2, "data2", DATA2_VALUE);
394 const double DATA5_VALUE = 500.1;
395 row2->putReal(row2, "data3", DATA5_VALUE);
396 row2->putText(row2, "data5", "ABCDEFGHI");
397 OH_Data_VBuckets *rows = OH_VBuckets_Create();
398 NAPI_ASSERT(env, rows != nullptr, "OH_VBuckets_Create is fail.");
399 ret = OH_VBuckets_PutRow(rows, row1);
400 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBuckets_PutRow is fail.");
401 size_t count = -1;
402 ret = OH_VBuckets_RowCount(rows, &count);
403 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
404 NAPI_ASSERT(env, count == 1, "OH_Rdb_CreateConfig is fail.");
405 ret = OH_VBuckets_PutRow(rows, row2);
406 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBuckets_PutRow is fail.");
407 ret = OH_VBuckets_RowCount(rows, &count);
408 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBuckets_RowCount is fail.");
409 NAPI_ASSERT(env, count == 2, "OH_VBuckets_RowCount is fail.");
410 OH_Data_VBuckets *rows2 = OH_VBuckets_Create();
411 NAPI_ASSERT(env, rows != nullptr, "OH_Rdb_CreateConfig is fail.");
412 ret = OH_VBuckets_PutRows(rows2, rows);
413 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBuckets_PutRows is fail.");
414 ret = OH_VBuckets_Destroy(rows);
415 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBuckets_Destroy is fail.");
416 int64_t changes = -1;
417 ret = OH_RdbTrans_BatchInsert(trans, table, rows2, RDB_CONFLICT_REPLACE, &changes);
418 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_BatchInsert is fail.");
419 const int EXPECTED_CHANGES = 2;
420 NAPI_ASSERT(env, changes == EXPECTED_CHANGES, "OH_RdbTrans_BatchInsert is fail.");
421 row1->destroy(row1);
422 row2->destroy(row2);
423 ret = OH_VBuckets_Destroy(rows2);
424 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBuckets_Destroy is fail.");
425 ret = OH_RdbTrans_Destroy(trans);
426 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_Destroy is fail.");
427
428 napi_value result;
429 napi_create_int32(env, ret, &result);
430 return result;
431 }
432
OH_RdbTrans_Update0100(napi_env env,napi_callback_info info)433 static napi_value OH_RdbTrans_Update0100(napi_env env, napi_callback_info info)
434 {
435 OH_Rdb_Transaction *trans = nullptr;
436 const char *table = "test";
437 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
438 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateTransaction is fail.");
439 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_CreateTransaction is fail.");
440 OH_VBucket *valueBucket = OH_Rdb_CreateValuesBucket();
441 valueBucket->putText(valueBucket, "data1", "liSi");
442 const int DATA1_VALUE = 14800;
443 valueBucket->putInt64(valueBucket, "data2", DATA1_VALUE);
444 const double DATA2_VALUE = 500.1;
445 valueBucket->putReal(valueBucket, "data3", DATA2_VALUE);
446 valueBucket->putNull(valueBucket, "data5");
447 OH_Predicates *predicates = OH_Rdb_CreatePredicates(table);
448 OH_VObject *valueObject = OH_Rdb_CreateValueObject();
449 const char *data1Value = "zhangSan";
450 valueObject->putText(valueObject, data1Value);
451 predicates->equalTo(predicates, "data1", valueObject);
452 int64_t changes = -1;
453 ret = OH_RdbTrans_Update(trans, valueBucket, predicates, &changes);
454 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_Update is fail.");
455 NAPI_ASSERT(env, changes == 1, "OH_RdbTrans_Update is fail.");
456 valueObject->destroy(valueObject);
457 valueBucket->destroy(valueBucket);
458 ret = OH_RdbTrans_Destroy(trans);
459 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_Destroy is fail.");
460
461 napi_value result;
462 napi_create_int32(env, ret, &result);
463 return result;
464 }
465
OH_RdbTrans_Delete0100(napi_env env,napi_callback_info info)466 static napi_value OH_RdbTrans_Delete0100(napi_env env, napi_callback_info info)
467 {
468 OH_Rdb_Transaction *trans = nullptr;
469 const char *table = "test";
470 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
471 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateTransaction is fail.");
472 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_CreateTransaction is fail.");
473 OH_Predicates *predicates = OH_Rdb_CreatePredicates(table);
474 OH_VObject *valueObject = OH_Rdb_CreateValueObject();
475 const char *data1Value = "liSi";
476 valueObject->putText(valueObject, data1Value);
477 predicates->equalTo(predicates, "data1", valueObject);
478 int64_t changes = -1;
479 ret = OH_RdbTrans_Delete(trans, predicates, &changes);
480 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_Delete is fail.");
481 NAPI_ASSERT(env, changes == 1, "OH_RdbTrans_Delete is fail.");
482 valueObject->destroy(valueObject);
483 ret = OH_RdbTrans_Destroy(trans);
484 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
485
486 napi_value result;
487 napi_create_int32(env, ret, &result);
488 return result;
489 }
490
OH_RdbTrans_QuerySql0100(napi_env env,napi_callback_info info)491 static napi_value OH_RdbTrans_QuerySql0100(napi_env env, napi_callback_info info)
492 {
493 OH_Rdb_Transaction *trans = nullptr;
494 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
495 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateTransaction is fail.");
496 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_CreateTransaction trans is fail.");
497
498 char createTableSql[] = "CREATE TABLE transaction_table (id INTEGER PRIMARY KEY AUTOINCREMENT, data1 INTEGER, "
499 "data2 INTEGER, data3 FLOAT, data4 TEXT, data5 BLOB, data6 ASSET, data7 ASSETS, data8 UNLIMITED INT, "
500 "data9 FLOATVECTOR);";
501 ret = OH_Rdb_Execute(g_transStore, createTableSql);
502 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_Execute is fail.");
503 const char *sql = "SELECT id, data1 FROM transaction_table";
504 OH_Cursor *cursor = OH_RdbTrans_QuerySql(nullptr, sql, nullptr);
505 NAPI_ASSERT(env, cursor == nullptr, "OH_Rdb_CreateConfig is fail.");
506 cursor = OH_RdbTrans_QuerySql(trans, nullptr, nullptr);
507 NAPI_ASSERT(env, cursor == nullptr, "OH_Rdb_CreateConfig is fail.");
508 cursor = OH_RdbTrans_QuerySql(trans, sql, nullptr);
509 NAPI_ASSERT(env, cursor != nullptr, "OH_Rdb_CreateConfig is fail.");
510 cursor->destroy(cursor);
511 OH_Data_Values *values = OH_Values_Create();
512 FillDataValues(env, values);
513 const char *insertSql = "INSERT INTO transaction_table "
514 "(data1, data2, data3, data4, data5, data6, data7, data8) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
515 OH_Data_Value *outValue = nullptr;
516 ret = OH_RdbTrans_Execute(trans, insertSql, values, &outValue);
517 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, "OH_RdbTrans_Execute ret= %{public}d", ret);
518 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_Execute insertSql is fail");
519 NAPI_ASSERT(env, outValue != nullptr, "OH_Rdb_CreateConfig is fail.");
520 ret = OH_Value_Destroy(outValue);
521 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
522 ret = OH_Values_Destroy(values);
523 NAPI_ASSERT(env, ret == RDB_OK, "OH_Values_Destroy is fail.");
524 const char *querySql = "SELECT * FROM transaction_table WHERE data1=?";
525 OH_Data_Values *queryValues = OH_Values_Create();
526 NAPI_ASSERT(env, queryValues != nullptr, "OH_Values_Create queryValues is fail.");
527 ret = OH_Values_PutInt(queryValues, 1);
528 NAPI_ASSERT(env, ret == RDB_OK, "OH_Values_PutInt queryValues is fail.");
529 OH_Cursor *cursorEnd = OH_RdbTrans_QuerySql(trans, querySql, queryValues);
530 NAPI_ASSERT(env, cursorEnd != nullptr, "OH_Rdb_CreateConfig is fail.");
531 int rowCount = 0;
532 cursorEnd->getRowCount(cursorEnd, &rowCount);
533 NAPI_ASSERT(env, rowCount == 1, "OH_Rdb_CreateConfig is fail.");
534 ret = OH_Values_Destroy(queryValues);
535 NAPI_ASSERT(env, ret == RDB_OK, "OH_Values_Destroy queryValues is fail.");
536 cursorEnd->destroy(cursorEnd);
537 ret = OH_RdbTrans_Destroy(trans);
538 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_Destroy trans is fail.");
539
540 napi_value result;
541 napi_create_int32(env, ret, &result);
542 return result;
543 }
544
OH_VBucket_PutFloatVector0100(napi_env env,napi_callback_info info)545 static napi_value OH_VBucket_PutFloatVector0100(napi_env env, napi_callback_info info)
546 {
547 OH_VBucket *valueBucket = OH_Rdb_CreateValuesBucket();
548 NAPI_ASSERT(env, valueBucket != nullptr, "OH_Rdb_CreateConfig is fail.");
549 float floatArr[] = { 1.0, 2.0, 3.0 };
550 int ret = OH_VBucket_PutFloatVector(valueBucket, "data1", floatArr, 0);
551 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBucket_PutFloatVector is fail.");
552 const int DATA_SIZE = 3;
553 ret = OH_VBucket_PutFloatVector(valueBucket, "data2", floatArr, DATA_SIZE);
554 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBucket_PutFloatVector is fail.");
555 valueBucket->destroy(valueBucket);
556
557 napi_value result;
558 napi_create_int32(env, ret, &result);
559 return result;
560 }
561
OH_VBucket_PutUnlimitedInt0100(napi_env env,napi_callback_info info)562 static napi_value OH_VBucket_PutUnlimitedInt0100(napi_env env, napi_callback_info info)
563 {
564 OH_VBucket *valueBucket = OH_Rdb_CreateValuesBucket();
565 NAPI_ASSERT(env, valueBucket != nullptr, "OH_Rdb_CreateConfig is fail.");
566 uint64_t trueForm[] = { 1, 2, 3 };
567 int ret = OH_VBucket_PutUnlimitedInt(valueBucket, "data1", 0, trueForm, 0);
568 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBucket_PutUnlimitedInt is fail.");
569 ret = OH_VBucket_PutUnlimitedInt(valueBucket, "data2", 1, trueForm, 3);
570 NAPI_ASSERT(env, ret == RDB_OK, "OH_VBucket_PutUnlimitedInt is fail.");
571 valueBucket->destroy(valueBucket);
572
573 napi_value result;
574 napi_create_int32(env, ret, &result);
575 return result;
576 }
577
578
OH_Rdb_SetTokenizer0100(napi_env env,napi_callback_info info)579 static napi_value OH_Rdb_SetTokenizer0100(napi_env env, napi_callback_info info)
580 {
581 mkdir(RDB_TEST_PATH, 0770);
582 OH_Rdb_ConfigV2 *config = InitRdbConfig(env);
583 NAPI_ASSERT(env, OH_Rdb_ErrCode::RDB_E_INVALID_ARGS ==
584 OH_Rdb_SetTokenizer(config, static_cast<Rdb_Tokenizer>(Rdb_Tokenizer::RDB_NONE_TOKENIZER - 1)), "OH_Rdb_SetTokenizer is fail.");
585 NAPI_ASSERT(env, OH_Rdb_ErrCode::RDB_E_INVALID_ARGS ==
586 OH_Rdb_SetTokenizer(config, static_cast<Rdb_Tokenizer>(Rdb_Tokenizer::RDB_CUSTOM_TOKENIZER + 1)), "OH_Rdb_SetTokenizer is fail.");
587 NAPI_ASSERT(env, OH_Rdb_ErrCode::RDB_OK ==
588 OH_Rdb_SetTokenizer(config, Rdb_Tokenizer::RDB_NONE_TOKENIZER), "RDB_NONE_TOKENIZER is fail.");
589 NAPI_ASSERT(env, OH_Rdb_ErrCode::RDB_OK ==
590 OH_Rdb_SetTokenizer(config, Rdb_Tokenizer::RDB_CUSTOM_TOKENIZER), "RDB_CUSTOM_TOKENIZER is fail.");
591 NAPI_ASSERT(env, OH_Rdb_ErrCode::RDB_OK == OH_Rdb_SetTokenizer(config, Rdb_Tokenizer::RDB_ICU_TOKENIZER), "RDB_ICU_TOKENIZER is fail.");
592 int numType = 0;
593 const int *supportTypeList = OH_Rdb_GetSupportedDbType(&numType);
594 NAPI_ASSERT(env, supportTypeList != nullptr, "OH_Rdb_SetDbType is fail.");
595 OH_Rdb_DestroyConfig(config);
596 int returnCode = 0;
597 napi_value result;
598 napi_create_int32(env, returnCode, &result);
599 return result;
600 }
601
602
OH_Rdb_IsTokenizerSupported0100(napi_env env,napi_callback_info info)603 static napi_value OH_Rdb_IsTokenizerSupported0100(napi_env env, napi_callback_info info)
604 {
605 bool isSupported = true;
606 int errCode = OH_Rdb_IsTokenizerSupported(RDB_NONE_TOKENIZER, &isSupported);
607 NAPI_ASSERT(env, errCode == RDB_OK, "OH_Rdb_CreateConfig is fail.");
608 errCode = OH_Rdb_IsTokenizerSupported(RDB_ICU_TOKENIZER, &isSupported);
609 NAPI_ASSERT(env, errCode == RDB_OK, "OH_Rdb_CreateConfig is fail.");
610 errCode = OH_Rdb_IsTokenizerSupported(RDB_CUSTOM_TOKENIZER, &isSupported);
611 NAPI_ASSERT(env, errCode == RDB_OK, "OH_Rdb_CreateConfig is fail.");
612 errCode = OH_Rdb_IsTokenizerSupported(static_cast<Rdb_Tokenizer>(RDB_NONE_TOKENIZER - 1), &isSupported);
613 NAPI_ASSERT(env, RDB_E_INVALID_ARGS == errCode, "OH_Rdb_CreateConfig is fail.");
614 errCode = OH_Rdb_IsTokenizerSupported(static_cast<Rdb_Tokenizer>(RDB_CUSTOM_TOKENIZER + 1), &isSupported);
615 NAPI_ASSERT(env, RDB_E_INVALID_ARGS == errCode, "OH_Rdb_CreateConfig is fail.");
616 int returnCode = 0;
617 napi_value result;
618 napi_create_int32(env, returnCode, &result);
619 return result;
620 }
621
OH_RdbTrans_Commit0100(napi_env env,napi_callback_info info)622 static napi_value OH_RdbTrans_Commit0100(napi_env env, napi_callback_info info)
623 {
624 OH_Rdb_Transaction *trans = nullptr;
625 const char *table = "test";
626 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
627 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
628 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_CreateConfig is fail.");
629 OH_VBucket *valueBucket = OH_Rdb_CreateValuesBucket();
630 valueBucket->putText(valueBucket, "data1", "test_name4");
631 const int DATA2_VALUE = 14800;
632 valueBucket->putInt64(valueBucket, "data2", DATA2_VALUE);
633 const double DATA3_VALUE = 300.1;
634 valueBucket->putReal(valueBucket, "data3", DATA3_VALUE);
635 valueBucket->putText(valueBucket, "data5", "ABCDEFGHI");
636 int64_t rowId = -1;
637 ret = OH_RdbTrans_Insert(trans, table, valueBucket, &rowId);
638 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
639 NAPI_ASSERT(env, rowId == 4, "OH_Rdb_CreateConfig is fail.");
640 ret = OH_RdbTrans_Commit(trans);
641 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
642 valueBucket->destroy(valueBucket);
643 ret = OH_RdbTrans_Destroy(trans);
644 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_CreateConfig is fail.");
645
646 napi_value result;
647 napi_create_int32(env, ret, &result);
648 return result;
649 }
650
OH_RdbTrans_InsertWithConflictResolution0100(napi_env env,napi_callback_info)651 static napi_value OH_RdbTrans_InsertWithConflictResolution0100(napi_env env, napi_callback_info)
652 {
653 const int64_t dataValue2 = 13800;
654 const double dataValue3 = 200.1;
655 OH_Rdb_Transaction *trans = nullptr;
656 const char *table = "test";
657 int ret = OH_Rdb_CreateTransaction(g_transStore, g_options, &trans);
658 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_InsertWithConflictResolution is fail.");
659 NAPI_ASSERT(env, trans != nullptr, "OH_Rdb_InsertWithConflictResolution is fail.");
660 OH_VBucket *valueBucket = OH_Rdb_CreateValuesBucket();
661 valueBucket->putText(valueBucket, "data1", "liSi");
662 valueBucket->putInt64(valueBucket, "data2", dataValue2);
663 valueBucket->putReal(valueBucket, "data3", dataValue3);
664 valueBucket->putNull(valueBucket, "data5");
665 OH_Predicates *predicates = OH_Rdb_CreatePredicates(table);
666 OH_VObject *valueObject = OH_Rdb_CreateValueObject();
667 const char *data1Value = "zhangSan";
668 valueObject->putText(valueObject, data1Value);
669 predicates->equalTo(predicates, "data1", valueObject);
670 int64_t changes = -1;
671 ret = OH_RdbTrans_InsertWithConflictResolution(trans, table, valueBucket,
672 static_cast<Rdb_ConflictResolution>(0), &changes);
673 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_RdbTrans_InsertWithConflictResolution is fail.");
674 ret = OH_RdbTrans_UpdateWithConflictResolution(trans, valueBucket, predicates, RDB_CONFLICT_REPLACE, &changes);
675 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_UpdateWithConflictResolution is fail.");
676 NAPI_ASSERT(env, changes == 1, "OH_RdbTrans_UpdateWithConflictResolution is fail.");
677 valueObject->destroy(valueObject);
678 valueBucket->destroy(valueBucket);
679 ret = OH_RdbTrans_Destroy(trans);
680 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_InsertWithConflictResolution is fail.");
681
682 napi_value result = nullptr;
683 napi_create_int32(env, ret, &result);
684 return result;
685 }
686
OH_Rdb_SetCustomDir0100(napi_env env,napi_callback_info)687 static napi_value OH_Rdb_SetCustomDir0100(napi_env env, napi_callback_info)
688 {
689 const char *customDir = "test";
690 auto ret = OH_Rdb_SetCustomDir(nullptr, customDir);
691 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_RdbTrans_InsertWithConflictResolution is fail.");
692 ret = OH_Rdb_SetCustomDir(nullptr, "12345678901234567890123456789012345678901234567890"
693 "12345678901234567890123456789012345678901234567890123456789012345678901234567890");
694 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_RdbTrans_InsertWithConflictResolution is fail.");
695 OH_Rdb_ConfigV2 *confg = OH_Rdb_CreateConfig();
696 NAPI_ASSERT(env, confg != nullptr, "OH_RdbTrans_InsertWithConflictResolution is fail.");
697 ret = OH_Rdb_SetCustomDir(confg, nullptr);
698 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_RdbTrans_InsertWithConflictResolution is fail.");
699 ret = OH_Rdb_SetCustomDir(confg, customDir);
700 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_InsertWithConflictResolution is fail.");
701 ret = OH_Rdb_DestroyConfig(confg);
702 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_InsertWithConflictResolution is fail.");
703
704 napi_value result = nullptr;
705 napi_create_int32(env, ret, &result);
706 return result;
707 }
708
OH_Rdb_SetReadOnly0100(napi_env env,napi_callback_info)709 static napi_value OH_Rdb_SetReadOnly0100(napi_env env, napi_callback_info)
710 {
711 OH_Rdb_ConfigV2 *confg = OH_Rdb_CreateConfig();
712 NAPI_ASSERT(env, confg != nullptr, "OH_Rdb_CreateConfig is fail.");
713 auto ret = OH_Rdb_SetReadOnly(nullptr, true);
714 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_Rdb_SetReadOnly is fail.");
715 ret = OH_Rdb_SetReadOnly(confg, true);
716 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_SetReadOnly is fail.");
717 ret = OH_Rdb_SetReadOnly(confg, false);
718 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_SetReadOnly is fail.");
719 ret = OH_Rdb_DestroyConfig(confg);
720 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_DestroyConfig is fail.");
721
722 napi_value result = nullptr;
723 napi_create_int32(env, ret, &result);
724 return result;
725 }
726
OH_Rdb_SetPlugins0100(napi_env env,napi_callback_info)727 static napi_value OH_Rdb_SetPlugins0100(napi_env env, napi_callback_info)
728 {
729 OH_Rdb_ConfigV2 *confg = OH_Rdb_CreateConfig();
730 NAPI_ASSERT(env, confg != nullptr, "OH_RdbTrans_InsertWithConflictResolution is fail.");
731 const char *plugins[] = {"1"};
732 auto ret = OH_Rdb_SetPlugins(nullptr, plugins, 1);
733 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_RdbTrans_InsertWithConflictResolution is fail.");
734 ret = OH_Rdb_SetPlugins(confg, nullptr, 1);
735 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_RdbTrans_InsertWithConflictResolution is fail.");
736 ret = OH_Rdb_SetPlugins(confg, plugins, 0);
737 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_InsertWithConflictResolution is fail.");
738 ret = OH_Rdb_SetPlugins(confg, plugins, 1);
739 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_InsertWithConflictResolution is fail.");
740 const char *pluginsNew[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "0", "x"};
741 ret = OH_Rdb_SetPlugins(confg, pluginsNew, sizeof(pluginsNew) / sizeof(pluginsNew[0]) - 1);
742 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_InsertWithConflictResolution is fail.");
743 ret = OH_Rdb_SetPlugins(confg, pluginsNew, sizeof(pluginsNew) / sizeof(pluginsNew[0]));
744 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_RdbTrans_InsertWithConflictResolution is fail.");
745 ret = OH_Rdb_DestroyConfig(confg);
746 NAPI_ASSERT(env, ret == RDB_OK, "OH_RdbTrans_InsertWithConflictResolution is fail.");
747
748 napi_value result = nullptr;
749 napi_create_int32(env, ret, &result);
750 return result;
751 }
752
OH_Rdb_SetSemanticIndex_Param_0100(napi_env env,napi_callback_info info)753 static napi_value OH_Rdb_SetSemanticIndex_Param_0100(napi_env env, napi_callback_info info)
754 {
755 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, " func OH_Rdb_SetSemanticIndex_Param_0100 ------------- ");
756 OH_Rdb_ConfigV2 *confg = OH_Rdb_CreateConfig();
757 NAPI_ASSERT(env, confg != nullptr, "OH_Rdb_CreateConfig is fail.");
758 auto ret = OH_Rdb_SetSemanticIndex(nullptr, true);
759 NAPI_ASSERT(env, ret == RDB_E_INVALID_ARGS, "OH_Rdb_SetSemanticIndex is fail.");
760 ret = OH_Rdb_SetSemanticIndex(confg, true);
761 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_SetSemanticIndex is fail.");
762 ret = OH_Rdb_SetSemanticIndex(confg, false);
763 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_SetSemanticIndex is fail.");
764 ret = OH_Rdb_DestroyConfig(confg);
765 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_DestroyConfig is fail.");
766 napi_value result = nullptr;
767 napi_create_int32(env, ret, &result);
768 return result;
769 }
770
InitRdbConfigV2(OH_Rdb_ConfigV2 * configV2,char * storeName)771 static void InitRdbConfigV2(OH_Rdb_ConfigV2 *configV2, char *storeName)
772 {
773 OH_Rdb_SetDatabaseDir(configV2, RDB_TEST_PATH);
774 OH_Rdb_SetStoreName(configV2, storeName);
775 OH_Rdb_SetBundleName(configV2, "com.ohos.example.distributedndk");
776 OH_Rdb_SetModuleName(configV2, "module");
777 OH_Rdb_SetEncrypted(configV2, false);
778 OH_Rdb_SetSecurityLevel(configV2, OH_Rdb_SecurityLevel::S1);
779 OH_Rdb_SetArea(configV2, RDB_SECURITY_AREA_EL1);
780 OH_Rdb_SetDbType(configV2, RDB_SQLITE);
781 OH_Rdb_SetTokenizer(configV2, RDB_CUSTOM_TOKENIZER);
782 }
783
CreateTable(napi_env env,OH_Rdb_Store * store)784 static void CreateTable(napi_env env, OH_Rdb_Store *store)
785 {
786 char createTableSql[] = "CREATE TABLE IF NOT EXISTS mail ("
787 "id INTEGER PRIMARY KEY,"
788 "subject TEXT,"
789 "content TEXT"
790 ");";
791 auto ret = OH_Rdb_Execute(store, createTableSql);
792 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Execute create is fail.");
793 ret = OH_Rdb_CloseStore(store);
794 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_CloseStore is fail.");
795 }
796
InsertData(napi_env env,OH_Rdb_Store * store)797 static void InsertData(napi_env env, OH_Rdb_Store *store)
798 {
799 char insertSql1[] = "INSERT INTO mail (id, subject, content) VALUES (0, '运动直播场景', '运动直播场景正文');";
800 auto ret = OH_Rdb_Execute(store, insertSql1);
801 NAPI_ASSERT_RETURN_VOID(env, ret == RDB_OK, "OH_Rdb_Execute1 is fail.");
802 }
803
OH_Rdb_SetSemanticIndex_Param_0200(napi_env env,napi_callback_info info)804 static napi_value OH_Rdb_SetSemanticIndex_Param_0200(napi_env env, napi_callback_info info)
805 {
806 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, " func OH_Rdb_SetSemanticIndex_Param_0200 ------------- ");
807 OH_Rdb_ConfigV2 *confg = OH_Rdb_CreateConfig();
808 NAPI_ASSERT(env, confg != nullptr, "OH_Rdb_CreateConfig is fail.");
809 InitRdbConfigV2(confg, "rdb_store_test.db");
810 int ret = OH_Rdb_DeleteStoreV2(confg);
811 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_DeleteStoreV2 is fail.");
812 int errCode = OH_Rdb_ErrCode::RDB_OK;
813 auto store = OH_Rdb_CreateOrOpen(confg, &errCode);
814 NAPI_ASSERT(env, store != nullptr, "OH_Rdb_CreateOrOpen is fail.");
815 CreateTable(env, store);
816 ret = OH_Rdb_SetSemanticIndex(confg, false);
817 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_SetSemanticIndex is fail.");
818
819 store = OH_Rdb_CreateOrOpen(confg, &errCode);
820 NAPI_ASSERT(env, store != nullptr, "OH_Rdb_CreateOrOpen is fail.");
821 InsertData(env, store);
822 std::this_thread::sleep_for(std::chrono::seconds(WAIT_TIME));
823
824 char querySql[] = "select count(*) from mail_inverted";
825 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(store, querySql);
826 NAPI_ASSERT(env, cursor != nullptr, "OH_Rdb_ExecuteQuery is fail.");
827 int rowCount = 0;
828 cursor->getRowCount(cursor, &rowCount);
829 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, "result row count is %{public}d", rowCount);
830 NAPI_ASSERT(env, rowCount <= 0, "getRowCount is fail.");
831
832 InitRdbConfigV2(confg, "rdb_store_test_vector.db");
833 OH_Rdb_SetDbType(confg, RDB_CAYLEY);
834 store = OH_Rdb_CreateOrOpen(confg, &errCode);
835 NAPI_ASSERT(env, store != nullptr, "OH_Rdb_CreateOrOpen vector is fail.");
836 char querySqlVector[] = "select count(*) from mail_vector";
837 cursor = OH_Rdb_ExecuteQuery(store, querySqlVector);
838 NAPI_ASSERT(env, cursor != nullptr, "OH_Rdb_ExecuteQuery is fail.");
839 cursor->getRowCount(cursor, &rowCount);
840 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, "result vector row count is %{public}d", rowCount);
841 NAPI_ASSERT(env, rowCount <= 0, "getRowCount is fail.");
842
843 ret = OH_Rdb_DestroyConfig(confg);
844 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_DestroyConfig is fail.");
845
846 napi_value result = nullptr;
847 napi_create_int32(env, ret, &result);
848 return result;
849 }
850
OH_Rdb_SetSemanticIndex_Param_0300(napi_env env,napi_callback_info info)851 static napi_value OH_Rdb_SetSemanticIndex_Param_0300(napi_env env, napi_callback_info info)
852 {
853 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, " func OH_Rdb_SetSemanticIndex_Param_0300 ------------- ");
854 OH_Rdb_ConfigV2 *confg = OH_Rdb_CreateConfig();
855 NAPI_ASSERT(env, confg != nullptr, "OH_Rdb_CreateConfig is fail.");
856 InitRdbConfigV2(confg, "rdb_store_test.db");
857 int ret = OH_Rdb_DeleteStoreV2(confg);
858 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_DeleteStoreV2 is fail.");
859 int errCode = OH_Rdb_ErrCode::RDB_OK;
860 auto store = OH_Rdb_CreateOrOpen(confg, &errCode);
861 NAPI_ASSERT(env, store != nullptr, "OH_Rdb_CreateOrOpen is fail.");
862 CreateTable(env, store);
863 ret = OH_Rdb_SetSemanticIndex(confg, true);
864 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_SetSemanticIndex is fail.");
865
866 store = OH_Rdb_CreateOrOpen(confg, &errCode);
867 NAPI_ASSERT(env, store != nullptr, "OH_Rdb_CreateOrOpen is fail.");
868 InsertData(env, store);
869 std::this_thread::sleep_for(std::chrono::seconds(WAIT_TIME));
870
871 char querySql[] = "select count(*) from mail_inverted";
872 OH_Cursor *cursor = OH_Rdb_ExecuteQuery(store, querySql);
873 NAPI_ASSERT(env, cursor != nullptr, "OH_Rdb_ExecuteQuery is fail.");
874 int rowCount = 0;
875 cursor->getRowCount(cursor, &rowCount);
876 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, "result row count is %{public}d", rowCount);
877 NAPI_ASSERT(env, rowCount > 0, "getRowCount is fail.");
878
879 InitRdbConfigV2(confg, "rdb_store_test_vector.db");
880 OH_Rdb_SetDbType(confg, RDB_CAYLEY);
881 store = OH_Rdb_CreateOrOpen(confg, &errCode);
882 NAPI_ASSERT(env, store != nullptr, "OH_Rdb_CreateOrOpen is fail.");
883 char querySqlVector[] = "select count(*) from mail_vector";
884 cursor = OH_Rdb_ExecuteQuery(store, querySqlVector);
885 NAPI_ASSERT(env, cursor != nullptr, "OH_Rdb_ExecuteQuery is fail.");
886 cursor->getRowCount(cursor, &rowCount);
887 OH_LOG_Print(LOG_APP, LOG_ERROR, 0, TAG, "result vector row count is %{public}d", rowCount);
888 NAPI_ASSERT(env, rowCount > 0, "getRowCount is fail.");
889
890 ret = OH_Rdb_DestroyConfig(confg);
891 NAPI_ASSERT(env, ret == RDB_OK, "OH_Rdb_DestroyConfig is fail.");
892
893 napi_value result = nullptr;
894 napi_create_int32(env, ret, &result);
895 return result;
896 }
897
898 EXTERN_C_START
Init(napi_env env,napi_value exports)899 static napi_value Init(napi_env env, napi_value exports)
900 {
901 napi_property_descriptor desc[] = {
902 { "RdbstoreSetUpTestCase", nullptr, RdbstoreSetUpTestCase, nullptr, nullptr, nullptr, napi_default, nullptr },
903 { "RdbstoreTearDownTestCase", nullptr, RdbstoreTearDownTestCase, nullptr, nullptr, nullptr, napi_default, nullptr },
904 { "OH_Rdb_Transaction0100", nullptr, OH_Rdb_Transaction0100, nullptr, nullptr, nullptr, napi_default, nullptr },
905 { "OH_Rdb_CreateTransaction0100", nullptr, OH_Rdb_CreateTransaction0100, nullptr, nullptr, nullptr, napi_default, nullptr },
906 { "OH_RdbTrans_Rollback0100", nullptr, OH_RdbTrans_Rollback0100, nullptr, nullptr, nullptr, napi_default, nullptr },
907 { "OH_RdbTrans_Query0100", nullptr, OH_RdbTrans_Query0100, nullptr, nullptr, nullptr, napi_default, nullptr },
908 { "OH_VBuckets_Create0100", nullptr, OH_VBuckets_Create0100, nullptr, nullptr, nullptr, napi_default, nullptr },
909 { "OH_VBuckets_Destroy0100", nullptr, OH_VBuckets_Destroy0100, nullptr, nullptr, nullptr, napi_default, nullptr },
910 { "OH_RdbTrans_Update0100", nullptr, OH_RdbTrans_Update0100, nullptr, nullptr, nullptr, napi_default, nullptr },
911 { "OH_RdbTrans_Delete0100", nullptr, OH_RdbTrans_Delete0100, nullptr, nullptr, nullptr, napi_default, nullptr },
912 { "OH_RdbTrans_QuerySql0100", nullptr, OH_RdbTrans_QuerySql0100, nullptr, nullptr, nullptr, napi_default, nullptr },
913 { "OH_VBucket_PutFloatVector0100", nullptr, OH_VBucket_PutFloatVector0100, nullptr, nullptr, nullptr, napi_default, nullptr },
914 { "OH_VBucket_PutUnlimitedInt0100", nullptr, OH_VBucket_PutUnlimitedInt0100, nullptr, nullptr, nullptr, napi_default, nullptr },
915 { "OH_Rdb_SetTokenizer0100", nullptr, OH_Rdb_SetTokenizer0100, nullptr, nullptr, nullptr, napi_default, nullptr },
916 { "OH_Rdb_IsTokenizerSupported0100", nullptr, OH_Rdb_IsTokenizerSupported0100, nullptr, nullptr, nullptr, napi_default, nullptr },
917 { "OH_RdbTrans_Commit0100", nullptr, OH_RdbTrans_Commit0100, nullptr, nullptr, nullptr, napi_default, nullptr },
918 { "OH_RdbTrans_InsertWithConflictResolution0100", nullptr, OH_RdbTrans_InsertWithConflictResolution0100, nullptr, nullptr, nullptr, napi_default, nullptr },
919 { "OH_Rdb_SetCustomDir0100", nullptr, OH_Rdb_SetCustomDir0100, nullptr, nullptr, nullptr, napi_default, nullptr },
920 { "OH_Rdb_SetReadOnly0100", nullptr, OH_Rdb_SetReadOnly0100, nullptr, nullptr, nullptr, napi_default, nullptr },
921 { "OH_Rdb_SetPlugins0100", nullptr, OH_Rdb_SetPlugins0100, nullptr, nullptr, nullptr, napi_default, nullptr },
922 { "OH_Rdb_SetSemanticIndex_Param_0100", nullptr, OH_Rdb_SetSemanticIndex_Param_0100, nullptr, nullptr, nullptr,
923 napi_default, nullptr },
924 { "OH_Rdb_SetSemanticIndex_Param_0200", nullptr, OH_Rdb_SetSemanticIndex_Param_0200, nullptr, nullptr, nullptr,
925 napi_default, nullptr },
926 { "OH_Rdb_SetSemanticIndex_Param_0300", nullptr, OH_Rdb_SetSemanticIndex_Param_0300, nullptr, nullptr, nullptr,
927 napi_default, nullptr },
928 };
929
930 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
931 return exports;
932 }
933 EXTERN_C_END
934
935 static napi_module demoModule = {
936 .nm_version = 1,
937 .nm_flags = 0,
938 .nm_filename = nullptr,
939 .nm_register_func = Init,
940 .nm_modname = "transaction",
941 .nm_priv = ((void*)0),
942 .reserved = { 0 },
943 };
944
RegisterEntryModule(void)945 extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
946 {
947 napi_module_register(&demoModule);
948 }
949