1 /* 2 * Copyright (c) 2024 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 16 #include "relational_store_ffi.h" 17 #include "relational_store_utils.h" 18 #include "napi_rdb_js_utils.h" 19 #include "rdb_errno.h" 20 #include "cj_lambda.h" 21 #include <cstdlib> 22 #include <cstdint> 23 24 using namespace OHOS::FFI; 25 26 namespace OHOS { 27 namespace Relational { 28 extern "C" { FfiOHOSRelationalStoreGetRdbStore(OHOS::AbilityRuntime::Context * context,StoreConfig config,int32_t * errCode)29 int64_t FfiOHOSRelationalStoreGetRdbStore(OHOS::AbilityRuntime::Context* context, StoreConfig config, 30 int32_t *errCode) 31 { 32 return GetRdbStore(context, config, errCode); 33 } 34 FfiOHOSRelationalStoreDeleteRdbStore(OHOS::AbilityRuntime::Context * context,const char * name,int32_t * errCode)35 void FfiOHOSRelationalStoreDeleteRdbStore(OHOS::AbilityRuntime::Context* context, const char* name, 36 int32_t *errCode) 37 { 38 DeleteRdbStore(context, name, errCode); 39 } 40 FfiOHOSRelationalStoreDeleteRdbStoreConfig(OHOS::AbilityRuntime::Context * context,StoreConfig config,int32_t * errCode)41 void FfiOHOSRelationalStoreDeleteRdbStoreConfig(OHOS::AbilityRuntime::Context* context, StoreConfig config, 42 int32_t *errCode) 43 { 44 DeleteRdbStoreConfig(context, config, errCode); 45 } 46 FfiOHOSRelationalStoreRdbPredicatesConstructor(const char * tableName)47 int64_t FfiOHOSRelationalStoreRdbPredicatesConstructor(const char* tableName) 48 { 49 auto nativeRdbPredicates = FFIData::Create<RdbPredicatesImpl>(tableName); 50 if (nativeRdbPredicates == nullptr) { 51 return -1; 52 } 53 return nativeRdbPredicates->GetID(); 54 } 55 FfiOHOSRelationalStoreInDevices(int64_t id,const char ** devicesArray,int64_t devicesSize)56 int32_t FfiOHOSRelationalStoreInDevices(int64_t id, const char** devicesArray, int64_t devicesSize) 57 { 58 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 59 if (nativeRdbPredicates == nullptr) { 60 return -1; 61 } 62 nativeRdbPredicates->InDevices(devicesArray, devicesSize); 63 return 0; 64 } 65 FfiOHOSRelationalStoreInAllDevices(int64_t id)66 int32_t FfiOHOSRelationalStoreInAllDevices(int64_t id) 67 { 68 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 69 if (nativeRdbPredicates == nullptr) { 70 return -1; 71 } 72 nativeRdbPredicates->InAllDevices(); 73 return 0; 74 } 75 FfiOHOSRelationalStoreBeginWrap(int64_t id)76 int32_t FfiOHOSRelationalStoreBeginWrap(int64_t id) 77 { 78 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 79 if (nativeRdbPredicates == nullptr) { 80 return -1; 81 } 82 nativeRdbPredicates->BeginWrap(); 83 return 0; 84 } 85 FfiOHOSRelationalStoreEndWrap(int64_t id)86 int32_t FfiOHOSRelationalStoreEndWrap(int64_t id) 87 { 88 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 89 if (nativeRdbPredicates == nullptr) { 90 return -1; 91 } 92 nativeRdbPredicates->EndWrap(); 93 return 0; 94 } 95 FfiOHOSRelationalStoreOr(int64_t id)96 int32_t FfiOHOSRelationalStoreOr(int64_t id) 97 { 98 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 99 if (nativeRdbPredicates == nullptr) { 100 return -1; 101 } 102 nativeRdbPredicates->Or(); 103 return 0; 104 } 105 FfiOHOSRelationalStoreAnd(int64_t id)106 int32_t FfiOHOSRelationalStoreAnd(int64_t id) 107 { 108 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 109 if (nativeRdbPredicates == nullptr) { 110 return -1; 111 } 112 nativeRdbPredicates->And(); 113 return 0; 114 } 115 FfiOHOSRelationalStoreContains(int64_t id,const char * field,const char * value)116 int32_t FfiOHOSRelationalStoreContains(int64_t id, const char* field, const char* value) 117 { 118 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 119 if (nativeRdbPredicates == nullptr) { 120 return -1; 121 } 122 nativeRdbPredicates->Contains(field, value); 123 return 0; 124 } 125 FfiOHOSRelationalStoreBeginsWith(int64_t id,const char * field,const char * value)126 int32_t FfiOHOSRelationalStoreBeginsWith(int64_t id, const char* field, const char* value) 127 { 128 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 129 if (nativeRdbPredicates == nullptr) { 130 return -1; 131 } 132 nativeRdbPredicates->BeginsWith(field, value); 133 return 0; 134 } 135 FfiOHOSRelationalStoreEndsWith(int64_t id,const char * field,const char * value)136 int32_t FfiOHOSRelationalStoreEndsWith(int64_t id, const char* field, const char* value) 137 { 138 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 139 if (nativeRdbPredicates == nullptr) { 140 return -1; 141 } 142 nativeRdbPredicates->EndsWith(field, value); 143 return 0; 144 } 145 FfiOHOSRelationalStoreIsNull(int64_t id,const char * field)146 int32_t FfiOHOSRelationalStoreIsNull(int64_t id, const char* field) 147 { 148 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 149 if (nativeRdbPredicates == nullptr) { 150 return -1; 151 } 152 nativeRdbPredicates->IsNull(field); 153 return 0; 154 } 155 FfiOHOSRelationalStoreIsNotNull(int64_t id,const char * field)156 int32_t FfiOHOSRelationalStoreIsNotNull(int64_t id, const char* field) 157 { 158 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 159 if (nativeRdbPredicates == nullptr) { 160 return -1; 161 } 162 nativeRdbPredicates->IsNotNull(field); 163 return 0; 164 } 165 FfiOHOSRelationalStoreLike(int64_t id,const char * field,const char * value)166 int32_t FfiOHOSRelationalStoreLike(int64_t id, const char* field, const char* value) 167 { 168 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 169 if (nativeRdbPredicates == nullptr) { 170 return -1; 171 } 172 nativeRdbPredicates->Like(field, value); 173 return 0; 174 } 175 FfiOHOSRelationalStoreGlob(int64_t id,const char * field,const char * value)176 int32_t FfiOHOSRelationalStoreGlob(int64_t id, const char* field, const char* value) 177 { 178 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 179 if (nativeRdbPredicates == nullptr) { 180 return -1; 181 } 182 nativeRdbPredicates->Glob(field, value); 183 return 0; 184 } 185 FfiOHOSRelationalStoreOrderByAsc(int64_t id,const char * field)186 int32_t FfiOHOSRelationalStoreOrderByAsc(int64_t id, const char* field) 187 { 188 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 189 if (nativeRdbPredicates == nullptr) { 190 return -1; 191 } 192 nativeRdbPredicates->OrderByAsc(field); 193 return 0; 194 } 195 FfiOHOSRelationalStoreOrderByDesc(int64_t id,const char * field)196 int32_t FfiOHOSRelationalStoreOrderByDesc(int64_t id, const char* field) 197 { 198 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 199 if (nativeRdbPredicates == nullptr) { 200 return -1; 201 } 202 nativeRdbPredicates->OrderByDesc(field); 203 return 0; 204 } 205 FfiOHOSRelationalStoreDistinct(int64_t id)206 int32_t FfiOHOSRelationalStoreDistinct(int64_t id) 207 { 208 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 209 if (nativeRdbPredicates == nullptr) { 210 return -1; 211 } 212 nativeRdbPredicates->Distinct(); 213 return 0; 214 } 215 FfiOHOSRelationalStoreLimitAs(int64_t id,int32_t value)216 int32_t FfiOHOSRelationalStoreLimitAs(int64_t id, int32_t value) 217 { 218 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 219 if (nativeRdbPredicates == nullptr) { 220 return -1; 221 } 222 nativeRdbPredicates->LimitAs(value); 223 return 0; 224 } 225 FfiOHOSRelationalStoreOffsetAs(int64_t id,int32_t rowOffset)226 int32_t FfiOHOSRelationalStoreOffsetAs(int64_t id, int32_t rowOffset) 227 { 228 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 229 if (nativeRdbPredicates == nullptr) { 230 return -1; 231 } 232 nativeRdbPredicates->OffsetAs(rowOffset); 233 return 0; 234 } 235 FfiOHOSRelationalStoreGroupBy(int64_t id,const char ** fieldsArray,int64_t fieldsSize)236 int32_t FfiOHOSRelationalStoreGroupBy(int64_t id, const char** fieldsArray, int64_t fieldsSize) 237 { 238 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 239 if (nativeRdbPredicates == nullptr) { 240 return -1; 241 } 242 nativeRdbPredicates->GroupBy(fieldsArray, fieldsSize); 243 return 0; 244 } 245 FfiOHOSRelationalStoreIndexedBy(int64_t id,const char * field)246 int32_t FfiOHOSRelationalStoreIndexedBy(int64_t id, const char* field) 247 { 248 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 249 if (nativeRdbPredicates == nullptr) { 250 return -1; 251 } 252 nativeRdbPredicates->IndexedBy(field); 253 return 0; 254 } 255 FfiOHOSRelationalStoreLessThanOrEqualTo(int64_t id,const char * field,ValueType value)256 int32_t FfiOHOSRelationalStoreLessThanOrEqualTo(int64_t id, const char* field, ValueType value) 257 { 258 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 259 if (nativeRdbPredicates == nullptr) { 260 return -1; 261 } 262 nativeRdbPredicates->LessThanOrEqualTo(field, value); 263 return 0; 264 } 265 FfiOHOSRelationalStoreEqualTo(int64_t id,const char * field,ValueType value)266 int32_t FfiOHOSRelationalStoreEqualTo(int64_t id, const char* field, ValueType value) 267 { 268 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 269 if (nativeRdbPredicates == nullptr) { 270 return -1; 271 } 272 nativeRdbPredicates->EqualTo(field, value); 273 return 0; 274 } 275 276 FfiOHOSRelationalStoreGreaterThanOrEqualTo(int64_t id,const char * field,ValueType value)277 int32_t FfiOHOSRelationalStoreGreaterThanOrEqualTo(int64_t id, const char* field, ValueType value) 278 { 279 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 280 if (nativeRdbPredicates == nullptr) { 281 return -1; 282 } 283 nativeRdbPredicates->GreaterThanOrEqualTo(field, value); 284 return 0; 285 } 286 FfiOHOSRelationalStoreGreaterThan(int64_t id,const char * field,ValueType value)287 int32_t FfiOHOSRelationalStoreGreaterThan(int64_t id, const char* field, ValueType value) 288 { 289 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 290 if (nativeRdbPredicates == nullptr) { 291 return -1; 292 } 293 nativeRdbPredicates->GreaterThan(field, value); 294 return 0; 295 } 296 FfiOHOSRelationalStoreNotBetween(int64_t id,const char * field,ValueType lowValue,ValueType highValue)297 int32_t FfiOHOSRelationalStoreNotBetween(int64_t id, const char* field, ValueType lowValue, ValueType highValue) 298 { 299 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 300 if (nativeRdbPredicates == nullptr) { 301 return -1; 302 } 303 nativeRdbPredicates->NotBetween(field, lowValue, highValue); 304 return 0; 305 } 306 FfiOHOSRelationalStoreLessThan(int64_t id,const char * field,ValueType value)307 int32_t FfiOHOSRelationalStoreLessThan(int64_t id, const char* field, ValueType value) 308 { 309 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 310 if (nativeRdbPredicates == nullptr) { 311 return -1; 312 } 313 nativeRdbPredicates->LessThan(field, value); 314 return 0; 315 } 316 FfiOHOSRelationalStoreBetween(int64_t id,const char * field,ValueType lowValue,ValueType highValue)317 int32_t FfiOHOSRelationalStoreBetween(int64_t id, const char* field, ValueType lowValue, ValueType highValue) 318 { 319 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 320 if (nativeRdbPredicates == nullptr) { 321 return -1; 322 } 323 nativeRdbPredicates->Between(field, lowValue, highValue); 324 return 0; 325 } 326 FfiOHOSRelationalStoreIn(int64_t id,const char * field,ValueType * values,int64_t valuesSize)327 int32_t FfiOHOSRelationalStoreIn(int64_t id, const char* field, ValueType* values, int64_t valuesSize) 328 { 329 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 330 if (nativeRdbPredicates == nullptr) { 331 return -1; 332 } 333 nativeRdbPredicates->In(field, values, valuesSize); 334 return 0; 335 } 336 FfiOHOSRelationalStoreNotIn(int64_t id,const char * field,ValueType * values,int64_t valuesSize)337 int32_t FfiOHOSRelationalStoreNotIn(int64_t id, const char* field, ValueType* values, int64_t valuesSize) 338 { 339 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 340 if (nativeRdbPredicates == nullptr) { 341 return -1; 342 } 343 nativeRdbPredicates->NotIn(field, values, valuesSize); 344 return 0; 345 } 346 FfiOHOSRelationalStoreNotEqualTo(int64_t id,const char * field,ValueType value)347 int32_t FfiOHOSRelationalStoreNotEqualTo(int64_t id, const char* field, ValueType value) 348 { 349 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(id); 350 if (nativeRdbPredicates == nullptr) { 351 return -1; 352 } 353 nativeRdbPredicates->NotEqualTo(field, value); 354 return 0; 355 } 356 FfiOHOSRelationalStoreQuery(int64_t id,int64_t predicatesId,char ** columns,int64_t columnsSize,int32_t * errCode)357 int64_t FfiOHOSRelationalStoreQuery(int64_t id, int64_t predicatesId, char** columns, int64_t columnsSize, 358 int32_t *errCode) 359 { 360 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 361 if (nativeRdbStore == nullptr) { 362 *errCode = -1; 363 return -1; 364 } 365 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(predicatesId); 366 if (nativeRdbPredicates == nullptr) { 367 *errCode = -1; 368 return -1; 369 } 370 auto resultSet = nativeRdbStore->Query(*nativeRdbPredicates, columns, columnsSize); 371 if (resultSet == nullptr) { 372 *errCode = RelationalStoreJsKit::E_INNER_ERROR; 373 return -1; 374 } else { 375 *errCode = RelationalStoreJsKit::OK; 376 } 377 auto nativeResultSet = FFIData::Create<ResultSetImpl>(resultSet); 378 if (nativeResultSet == nullptr) { 379 *errCode = -1; 380 return -1; 381 } 382 return nativeResultSet->GetID(); 383 } 384 FfiOHOSRelationalStoreRemoteQuery(int64_t id,char * device,int64_t predicatesId,char ** columns,int64_t columnsSize)385 int64_t FfiOHOSRelationalStoreRemoteQuery(int64_t id, char* device, int64_t predicatesId, char** columns, 386 int64_t columnsSize) 387 { 388 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 389 if (nativeRdbStore == nullptr) { 390 return -1; 391 } 392 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(predicatesId); 393 if (nativeRdbPredicates == nullptr) { 394 return -1; 395 } 396 auto resultSet = nativeRdbStore->RemoteQuery(device, *nativeRdbPredicates, columns, columnsSize); 397 if (resultSet == nullptr) { 398 return -1; 399 } 400 auto nativeResultSet = FFIData::Create<ResultSetImpl>(resultSet); 401 if (nativeResultSet == nullptr) { 402 return -1; 403 } 404 return nativeResultSet->GetID(); 405 } 406 FfiOHOSRelationalStoreDelete(int64_t id,int64_t predicatesId,int32_t * errCode)407 int64_t FfiOHOSRelationalStoreDelete(int64_t id, int64_t predicatesId, int32_t *errCode) 408 { 409 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 410 if (nativeRdbStore == nullptr) { 411 *errCode = -1; 412 return -1; 413 } 414 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(predicatesId); 415 if (nativeRdbPredicates == nullptr) { 416 *errCode = -1; 417 return -1; 418 } 419 return nativeRdbStore->Delete(*nativeRdbPredicates, errCode); 420 } 421 FfiOHOSRelationalStoreSetDistributedTables(int64_t id,char ** tables,int64_t tablesSize)422 int32_t FfiOHOSRelationalStoreSetDistributedTables(int64_t id, char** tables, int64_t tablesSize) 423 { 424 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 425 if (nativeRdbStore == nullptr) { 426 return -1; 427 } 428 nativeRdbStore->SetDistributedTables(tables, tablesSize); 429 return 0; 430 } 431 FfiOHOSRelationalStoreSetDistributedTablesType(int64_t id,char ** tables,int64_t tablesSize,int32_t type)432 int32_t FfiOHOSRelationalStoreSetDistributedTablesType(int64_t id, char** tables, int64_t tablesSize, int32_t type) 433 { 434 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 435 if (nativeRdbStore == nullptr) { 436 return -1; 437 } 438 nativeRdbStore->SetDistributedTables(tables, tablesSize, type); 439 return 0; 440 } 441 FfiOHOSRelationalStoreSetDistributedTablesConfig(int64_t id,char ** tables,int64_t tablesSize,int32_t type,DistributedRdb::DistributedConfig & distributedConfig)442 int32_t FfiOHOSRelationalStoreSetDistributedTablesConfig(int64_t id, char** tables, int64_t tablesSize, 443 int32_t type, DistributedRdb::DistributedConfig &distributedConfig) 444 { 445 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 446 if (nativeRdbStore == nullptr) { 447 return -1; 448 } 449 nativeRdbStore->SetDistributedTables(tables, tablesSize, type, distributedConfig); 450 return 0; 451 } 452 FfiOHOSRelationalStoreObtainDistributedTableName(int64_t id,const char * device,char * table)453 char* FfiOHOSRelationalStoreObtainDistributedTableName(int64_t id, const char* device, char* table) 454 { 455 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 456 if (nativeRdbStore == nullptr) { 457 return nullptr; 458 } 459 return nativeRdbStore->ObtainDistributedTableName(device, table); 460 } 461 FfiOHOSRelationalStoreBackUp(int64_t id,const char * destName)462 int32_t FfiOHOSRelationalStoreBackUp(int64_t id, const char* destName) 463 { 464 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 465 if (nativeRdbStore == nullptr) { 466 return -1; 467 } 468 return nativeRdbStore->Backup(destName); 469 } 470 FfiOHOSRelationalStoreReStore(int64_t id,const char * srcName)471 int32_t FfiOHOSRelationalStoreReStore(int64_t id, const char* srcName) 472 { 473 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 474 if (nativeRdbStore == nullptr) { 475 return -1; 476 } 477 return nativeRdbStore->Restore(srcName); 478 } 479 FfiOHOSRelationalStoreCommit(int64_t id)480 int32_t FfiOHOSRelationalStoreCommit(int64_t id) 481 { 482 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 483 if (nativeRdbStore == nullptr) { 484 return -1; 485 } 486 return nativeRdbStore->Commit(); 487 } 488 FfiOHOSRelationalStoreRollBack(int64_t id)489 int32_t FfiOHOSRelationalStoreRollBack(int64_t id) 490 { 491 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 492 if (nativeRdbStore == nullptr) { 493 return -1; 494 } 495 return nativeRdbStore->RollBack(); 496 } 497 FfiOHOSRelationalStoreBeginTransaction(int64_t id)498 int32_t FfiOHOSRelationalStoreBeginTransaction(int64_t id) 499 { 500 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 501 if (nativeRdbStore == nullptr) { 502 return -1; 503 } 504 return nativeRdbStore->BeginTransaction(); 505 } 506 FfiOHOSRelationalStoreInsert(int64_t id,const char * table,ValuesBucket valuesBucket,int32_t conflict,int32_t * errCode)507 int64_t FfiOHOSRelationalStoreInsert(int64_t id, const char* table, ValuesBucket valuesBucket, int32_t conflict, 508 int32_t *errCode) 509 { 510 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 511 if (nativeRdbStore == nullptr) { 512 *errCode = -1; 513 return -1; 514 } 515 return nativeRdbStore->Insert(table, valuesBucket, conflict, errCode); 516 } 517 FfiOHOSRelationalStoreUpdate(int64_t id,ValuesBucket valuesBucket,int64_t predicatesId,NativeRdb::ConflictResolution conflictResolution,int32_t * errCode)518 int64_t FfiOHOSRelationalStoreUpdate(int64_t id, ValuesBucket valuesBucket, int64_t predicatesId, 519 NativeRdb::ConflictResolution conflictResolution, int32_t *errCode) 520 { 521 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 522 auto nativeRdbSPredicates = FFIData::GetData<RdbPredicatesImpl>(predicatesId); 523 if (nativeRdbStore == nullptr || nativeRdbSPredicates == nullptr) { 524 *errCode = -1; 525 return -1; 526 } 527 return nativeRdbStore->Update(valuesBucket, *nativeRdbSPredicates, conflictResolution, errCode); 528 } 529 FfiOHOSRelationalStoreExecuteSql(int64_t id,const char * sql,int32_t * errCode)530 void FfiOHOSRelationalStoreExecuteSql(int64_t id, const char* sql, int32_t *errCode) 531 { 532 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 533 if (nativeRdbStore == nullptr) { 534 *errCode = -1; 535 return; 536 } 537 nativeRdbStore->ExecuteSql(sql, errCode); 538 } 539 FfiOHOSRelationalStoreSync(int64_t id,int32_t mode,int64_t predicatesId,int32_t * errCode)540 CArrSyncResult FfiOHOSRelationalStoreSync(int64_t id, int32_t mode, int64_t predicatesId, int32_t *errCode) 541 { 542 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 543 auto nativeRdbPredicates = FFIData::GetData<RdbPredicatesImpl>(predicatesId); 544 if (nativeRdbStore == nullptr || nativeRdbPredicates == nullptr) { 545 *errCode = -1; 546 return CArrSyncResult{nullptr, nullptr, 0}; 547 } 548 return nativeRdbStore->Sync(mode, *nativeRdbPredicates); 549 } 550 FfiOHOSRelationalStoreGetAllColumnNames(int64_t id)551 CArrStr FfiOHOSRelationalStoreGetAllColumnNames(int64_t id) 552 { 553 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 554 if (nativeResultSet == nullptr) { 555 return CArrStr{nullptr, 0}; 556 } 557 return nativeResultSet->GetAllColumnNames(); 558 } 559 FfiOHOSRelationalStoreGetColumnCount(int64_t id,int32_t * errCode)560 int32_t FfiOHOSRelationalStoreGetColumnCount(int64_t id, int32_t *errCode) 561 { 562 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 563 if (nativeResultSet == nullptr) { 564 *errCode = -1; 565 return -1; 566 } 567 return nativeResultSet->GetColumnCount(); 568 } 569 FfiOHOSRelationalStoreGetRowCount(int64_t id,int32_t * errCode)570 int32_t FfiOHOSRelationalStoreGetRowCount(int64_t id, int32_t *errCode) 571 { 572 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 573 if (nativeResultSet == nullptr) { 574 *errCode = -1; 575 return -1; 576 } 577 return nativeResultSet->GetRowCount(); 578 } 579 FfiOHOSRelationalStoreGetRowIndex(int64_t id,int32_t * errCode)580 int32_t FfiOHOSRelationalStoreGetRowIndex(int64_t id, int32_t *errCode) 581 { 582 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 583 if (nativeResultSet == nullptr) { 584 *errCode = -1; 585 return -1; 586 } 587 return nativeResultSet->GetRowIndex(); 588 } 589 FfiOHOSRelationalStoreIsAtFirstRow(int64_t id,int32_t * errCode)590 bool FfiOHOSRelationalStoreIsAtFirstRow(int64_t id, int32_t *errCode) 591 { 592 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 593 if (nativeResultSet == nullptr) { 594 *errCode = -1; 595 return false; 596 } 597 *errCode = 0; 598 return nativeResultSet->IsAtFirstRow(); 599 } 600 FfiOHOSRelationalStoreIsAtLastRow(int64_t id,int32_t * errCode)601 bool FfiOHOSRelationalStoreIsAtLastRow(int64_t id, int32_t *errCode) 602 { 603 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 604 if (nativeResultSet == nullptr) { 605 *errCode = -1; 606 return false; 607 } 608 *errCode = 0; 609 return nativeResultSet->IsAtLastRow(); 610 } 611 FfiOHOSRelationalStoreIsEnded(int64_t id,int32_t * errCode)612 bool FfiOHOSRelationalStoreIsEnded(int64_t id, int32_t *errCode) 613 { 614 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 615 if (nativeResultSet == nullptr) { 616 *errCode = -1; 617 return false; 618 } 619 *errCode = 0; 620 return nativeResultSet->IsEnded(); 621 } 622 FfiOHOSRelationalStoreIsStarted(int64_t id,int32_t * errCode)623 bool FfiOHOSRelationalStoreIsStarted(int64_t id, int32_t *errCode) 624 { 625 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 626 if (nativeResultSet == nullptr) { 627 *errCode = -1; 628 return false; 629 } 630 *errCode = 0; 631 return nativeResultSet->IsStarted(); 632 } 633 FfiOHOSRelationalStoreIsClosed(int64_t id,int32_t * errCode)634 bool FfiOHOSRelationalStoreIsClosed(int64_t id, int32_t *errCode) 635 { 636 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 637 if (nativeResultSet == nullptr) { 638 *errCode = -1; 639 return false; 640 } 641 *errCode = 0; 642 return nativeResultSet->IsClosed(); 643 } 644 645 FfiOHOSRelationalStoreGetDouble(int64_t id,int32_t columnIndex,int32_t * rtnCode)646 double FfiOHOSRelationalStoreGetDouble(int64_t id, int32_t columnIndex, int32_t* rtnCode) 647 { 648 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 649 if (nativeResultSet == nullptr) { 650 *rtnCode = -1; 651 return -1; 652 } 653 return nativeResultSet->GetDouble(columnIndex, rtnCode); 654 } 655 FfiOHOSRelationalStoreGoToRow(int64_t id,int32_t position,int32_t * rtnCode)656 bool FfiOHOSRelationalStoreGoToRow(int64_t id, int32_t position, int32_t* rtnCode) 657 { 658 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 659 if (nativeResultSet == nullptr) { 660 *rtnCode = -1; 661 return false; 662 } 663 return nativeResultSet->GoToRow(position, rtnCode); 664 } 665 FfiOHOSRelationalStoreGoToPreviousRow(int64_t id,int32_t * rtnCode)666 bool FfiOHOSRelationalStoreGoToPreviousRow(int64_t id, int32_t* rtnCode) 667 { 668 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 669 if (nativeResultSet == nullptr) { 670 *rtnCode = -1; 671 return false; 672 } 673 return nativeResultSet->GoToPreviousRow(rtnCode); 674 } 675 FfiOHOSRelationalStoreGoToLastRow(int64_t id,int32_t * rtnCode)676 bool FfiOHOSRelationalStoreGoToLastRow(int64_t id, int32_t* rtnCode) 677 { 678 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 679 if (nativeResultSet == nullptr) { 680 *rtnCode = -1; 681 return false; 682 } 683 return nativeResultSet->GoToLastRow(rtnCode); 684 } 685 FfiOHOSRelationalStoreGetColumnName(int64_t id,int32_t columnIndex,int32_t * rtnCode)686 char* FfiOHOSRelationalStoreGetColumnName(int64_t id, int32_t columnIndex, int32_t* rtnCode) 687 { 688 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 689 if (nativeResultSet == nullptr) { 690 *rtnCode = -1; 691 return nullptr; 692 } 693 return nativeResultSet->GetColumnName(columnIndex, rtnCode); 694 } 695 FfiOHOSRelationalStoreIsColumnNull(int64_t id,int32_t columnIndex,int32_t * rtnCode)696 bool FfiOHOSRelationalStoreIsColumnNull(int64_t id, int32_t columnIndex, int32_t* rtnCode) 697 { 698 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 699 if (nativeResultSet == nullptr) { 700 *rtnCode = -1; 701 return false; 702 } 703 return nativeResultSet->IsColumnNull(columnIndex, rtnCode); 704 } 705 FfiOHOSRelationalStoreGetAsset(int64_t id,int32_t columnIndex,int32_t * rtnCode)706 Asset FfiOHOSRelationalStoreGetAsset(int64_t id, int32_t columnIndex, int32_t* rtnCode) 707 { 708 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 709 if (nativeResultSet == nullptr) { 710 *rtnCode = -1; 711 return Asset{nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, 0}; 712 } 713 return nativeResultSet->GetAsset(columnIndex, rtnCode); 714 } 715 FfiOHOSRelationalStoreClose(int64_t id)716 int32_t FfiOHOSRelationalStoreClose(int64_t id) 717 { 718 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 719 if (nativeResultSet == nullptr) { 720 return -1; 721 } 722 return nativeResultSet->Close(); 723 } 724 FfiOHOSRelationalStoreGetColumnIndex(int64_t id,char * columnName,int32_t * rtnCode)725 int32_t FfiOHOSRelationalStoreGetColumnIndex(int64_t id, char* columnName, int32_t* rtnCode) 726 { 727 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 728 if (nativeResultSet == nullptr) { 729 *rtnCode = -1; 730 return -1; 731 } 732 return nativeResultSet->GetColumnIndex(columnName, rtnCode); 733 } 734 FfiOHOSRelationalStoreGetString(int64_t id,int32_t columnIndex,int32_t * rtnCode)735 char* FfiOHOSRelationalStoreGetString(int64_t id, int32_t columnIndex, int32_t* rtnCode) 736 { 737 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 738 if (nativeResultSet == nullptr) { 739 *rtnCode = -1; 740 return nullptr; 741 } 742 return nativeResultSet->GetString(columnIndex, rtnCode); 743 } 744 FfiOHOSRelationalStoreGoToFirstRow(int64_t id,int32_t * rtnCode)745 bool FfiOHOSRelationalStoreGoToFirstRow(int64_t id, int32_t* rtnCode) 746 { 747 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 748 if (nativeResultSet == nullptr) { 749 *rtnCode = -1; 750 return false; 751 } 752 return nativeResultSet->GoToFirstRow(rtnCode); 753 } 754 FfiOHOSRelationalStoreGetLong(int64_t id,int32_t columnIndex,int32_t * rtnCode)755 int64_t FfiOHOSRelationalStoreGetLong(int64_t id, int32_t columnIndex, int32_t* rtnCode) 756 { 757 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 758 if (nativeResultSet == nullptr) { 759 *rtnCode = -1; 760 return -1; 761 } 762 return nativeResultSet->GetLong(columnIndex, rtnCode); 763 } 764 FfiOHOSRelationalStoreGoToNextRow(int64_t id,int32_t * rtnCode)765 bool FfiOHOSRelationalStoreGoToNextRow(int64_t id, int32_t* rtnCode) 766 { 767 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 768 if (nativeResultSet == nullptr) { 769 *rtnCode = -1; 770 return false; 771 } 772 return nativeResultSet->GoToNextRow(rtnCode); 773 } 774 FfiOHOSRelationalStoreGetBlob(int64_t id,int32_t columnIndex,int32_t * rtnCode)775 CArrUI8 FfiOHOSRelationalStoreGetBlob(int64_t id, int32_t columnIndex, int32_t* rtnCode) 776 { 777 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 778 if (nativeResultSet == nullptr) { 779 *rtnCode = -1; 780 return CArrUI8{nullptr, 0}; 781 } 782 return nativeResultSet->GetBlob(columnIndex, rtnCode); 783 } 784 FfiOHOSRelationalStoreGoTo(int64_t id,int32_t offset,int32_t * rtnCode)785 bool FfiOHOSRelationalStoreGoTo(int64_t id, int32_t offset, int32_t* rtnCode) 786 { 787 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 788 if (nativeResultSet == nullptr) { 789 *rtnCode = -1; 790 return false; 791 } 792 return nativeResultSet->GoTo(offset, rtnCode); 793 } 794 FfiOHOSRelationalStoreGetAssets(int64_t id,int32_t columnIndex,int32_t * rtnCode)795 Assets FfiOHOSRelationalStoreGetAssets(int64_t id, int32_t columnIndex, int32_t* rtnCode) 796 { 797 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 798 if (nativeResultSet == nullptr) { 799 *rtnCode = -1; 800 return Assets{nullptr, 0}; 801 } 802 return nativeResultSet->GetAssets(columnIndex, rtnCode); 803 } 804 FfiOHOSRelationalStoreGetRow(int64_t id,int32_t * errCode)805 ValuesBucket FfiOHOSRelationalStoreGetRow(int64_t id, int32_t *errCode) 806 { 807 auto nativeResultSet = FFIData::GetData<ResultSetImpl>(id); 808 if (nativeResultSet == nullptr) { 809 *errCode = -1; 810 return ValuesBucket{nullptr, nullptr, 0}; 811 } 812 return nativeResultSet->GetRow(errCode); 813 } 814 FfiOHOSRelationalStoreCleanDirtyData(int64_t id,const char * tableName,uint64_t cursor)815 int32_t FfiOHOSRelationalStoreCleanDirtyData(int64_t id, const char* tableName, uint64_t cursor) 816 { 817 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 818 if (nativeRdbStore == nullptr) { 819 return -1; 820 } 821 return nativeRdbStore->CleanDirtyData(tableName, cursor); 822 } 823 FfiOHOSRelationalStoreBatchInsert(int64_t id,const char * tableName,ValuesBucket * values,int64_t valuesSize,int64_t * insertNum)824 int32_t FfiOHOSRelationalStoreBatchInsert(int64_t id, const char* tableName, ValuesBucket* values, 825 int64_t valuesSize, int64_t* insertNum) 826 { 827 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 828 if (nativeRdbStore == nullptr) { 829 return -1; 830 } 831 return nativeRdbStore->BatchInsert(*insertNum, tableName, values, valuesSize); 832 } 833 FfiOHOSRelationalStoreQuerySql(int64_t id,const char * sql,ValueType * bindArgs,int64_t size,int32_t * errCode)834 int64_t FfiOHOSRelationalStoreQuerySql(int64_t id, const char *sql, ValueType *bindArgs, int64_t size, 835 int32_t* errCode) 836 { 837 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 838 if (nativeRdbStore == nullptr) { 839 *errCode = RelationalStoreJsKit::E_INNER_ERROR; 840 return -1; 841 } 842 auto resultSet = nativeRdbStore->QuerySql(sql, bindArgs, size); 843 if (resultSet == nullptr) { 844 *errCode = RelationalStoreJsKit::E_INNER_ERROR; 845 return -1; 846 } else { 847 *errCode = RelationalStoreJsKit::OK; 848 } 849 auto nativeResultSet = FFIData::Create<ResultSetImpl>(resultSet); 850 if (nativeResultSet == nullptr) { 851 *errCode = -1; 852 return -1; 853 } 854 return nativeResultSet->GetID(); 855 } 856 FfiOHOSRelationalStoreExecuteSqlBindArgs(int64_t id,char * sql,ValueType * bindArgs,int64_t bindArgsSize,int32_t * errCode)857 void FfiOHOSRelationalStoreExecuteSqlBindArgs(int64_t id, char* sql, ValueType* bindArgs, int64_t bindArgsSize, 858 int32_t *errCode) 859 { 860 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 861 if (nativeRdbStore == nullptr) { 862 *errCode = -1; 863 return; 864 } 865 nativeRdbStore->ExecuteSql(sql, bindArgs, bindArgsSize, errCode); 866 } 867 FfiOHOSRelationalStoreOn(int64_t id,const char * event,bool interProcess,void (* callback)(),void (* callbackRef)())868 int32_t FfiOHOSRelationalStoreOn(int64_t id, const char *event, bool interProcess, 869 void (*callback)(), void (*callbackRef)()) 870 { 871 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 872 if (nativeRdbStore == nullptr) { 873 return -1; 874 } 875 auto onChange = [lambda = CJLambda::Create(callbackRef)]() -> void { lambda(); }; 876 return nativeRdbStore->RegisterObserver(event, interProcess, (std::function<void()>*)(callback), onChange); 877 } 878 FfiOHOSRelationalStoreOff(int64_t id,const char * event,bool interProcess,void (* callback)())879 int32_t FfiOHOSRelationalStoreOff(int64_t id, const char *event, bool interProcess, void (*callback)()) 880 { 881 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 882 if (nativeRdbStore == nullptr) { 883 return -1; 884 } 885 return nativeRdbStore->UnRegisterObserver(event, interProcess, (std::function<void()>*)(callback)); 886 } 887 FfiOHOSRelationalStoreOffAll(int64_t id,const char * event,bool interProcess)888 int32_t FfiOHOSRelationalStoreOffAll(int64_t id, const char *event, bool interProcess) 889 { 890 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 891 if (nativeRdbStore == nullptr) { 892 return -1; 893 } 894 return nativeRdbStore->UnRegisterAllObserver(event, interProcess); 895 } 896 FfiOHOSRelationalStoreEmit(int64_t id,const char * event)897 int32_t FfiOHOSRelationalStoreEmit(int64_t id, const char *event) 898 { 899 auto nativeRdbStore = FFIData::GetData<RdbStoreImpl>(id); 900 if (nativeRdbStore == nullptr) { 901 return -1; 902 } 903 return nativeRdbStore->Emit(event); 904 } 905 } 906 } 907 } 908