1 /* 2 * Copyright (c) 2022 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 #ifndef RDB_JSKIT_NAPI_RDB_STORE_H 17 #define RDB_JSKIT_NAPI_RDB_STORE_H 18 19 #include <list> 20 #include <mutex> 21 22 #include "napi/native_api.h" 23 #include "napi/native_common.h" 24 #include "napi/native_node_api.h" 25 #include "napi_rdb_error.h" 26 #include "napi_rdb_store_observer.h" 27 #include "rdb_helper.h" 28 #include "rdb_types.h" 29 30 namespace OHOS { 31 namespace RdbJsKit { 32 class RdbStoreProxy { 33 public: 34 static void Init(napi_env env, napi_value exports); 35 static napi_value NewInstance( 36 napi_env env, std::shared_ptr<OHOS::NativeRdb::RdbStore> value, int version = AppDataMgrJsKit::APIVERSION_8); 37 static RdbStoreProxy *GetNativeInstance(napi_env env, napi_value self); 38 RdbStoreProxy(); 39 ~RdbStoreProxy(); 40 int apiversion = AppDataMgrJsKit::APIVERSION_8; 41 42 private: 43 static napi_value InnerInitialize( 44 napi_env env, napi_callback_info info, int version = AppDataMgrJsKit::APIVERSION_8); 45 static napi_value Initialize(napi_env env, napi_callback_info info); 46 static napi_value InitializeV9(napi_env env, napi_callback_info info); 47 static napi_value Delete(napi_env env, napi_callback_info info); 48 static napi_value Update(napi_env env, napi_callback_info info); 49 static napi_value Insert(napi_env env, napi_callback_info info); 50 static napi_value BatchInsert(napi_env env, napi_callback_info info); 51 static napi_value Query(napi_env env, napi_callback_info info); 52 static napi_value QuerySql(napi_env env, napi_callback_info info); 53 static napi_value ExecuteSql(napi_env env, napi_callback_info info); 54 static napi_value Count(napi_env env, napi_callback_info info); 55 static napi_value Replace(napi_env env, napi_callback_info info); 56 static napi_value Attach(napi_env env, napi_callback_info info); 57 static napi_value GetPath(napi_env env, napi_callback_info info); 58 static napi_value IsMemoryRdb(napi_env env, napi_callback_info info); 59 static napi_value IsHoldingConnection(napi_env env, napi_callback_info info); 60 static napi_value IsReadOnly(napi_env env, napi_callback_info info); 61 static napi_value BeginTransaction(napi_env env, napi_callback_info info); 62 static napi_value RollBack(napi_env env, napi_callback_info info); 63 static napi_value Commit(napi_env env, napi_callback_info info); 64 static napi_value QueryByStep(napi_env env, napi_callback_info info); 65 static napi_value IsInTransaction(napi_env env, napi_callback_info info); 66 static napi_value IsOpen(napi_env env, napi_callback_info info); 67 static napi_value GetVersion(napi_env env, napi_callback_info info); 68 static napi_value SetVersion(napi_env env, napi_callback_info info); 69 static napi_value SetDistributedTables(napi_env env, napi_callback_info info); 70 static napi_value ObtainDistributedTableName(napi_env env, napi_callback_info info); 71 static napi_value Sync(napi_env env, napi_callback_info info); 72 static napi_value OnEvent(napi_env env, napi_callback_info info); 73 static napi_value OffEvent(napi_env env, napi_callback_info info); 74 75 static constexpr int MIN_ON_EVENT_ARG_NUM = 2; 76 static constexpr int MAX_ON_EVENT_ARG_NUM = 5; 77 78 void OnDataChangeEvent(napi_env env, size_t argc, napi_value *argv); 79 void OffDataChangeEvent(napi_env env, size_t argc, napi_value *argv); 80 81 std::mutex mutex_; 82 std::shared_ptr<OHOS::NativeRdb::RdbStore> rdbStore_; 83 std::list<std::shared_ptr<NapiRdbStoreObserver>> observers_[DistributedRdb::SUBSCRIBE_MODE_MAX]; 84 }; 85 } // namespace RdbJsKit 86 } // namespace OHOS 87 88 #endif // RDB_JSKIT_NAPI_RDB_STORE_H 89