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 "rdb_data_manager.h"
17
18 #include "hilog_tag_wrapper.h"
19
20 namespace OHOS {
21 namespace AbilityRuntime {
Init(NativeRdb::RdbOpenCallback & rdbCallback)22 int32_t RdbDataManager::Init(NativeRdb::RdbOpenCallback &rdbCallback)
23 {
24 std::lock_guard<std::mutex> lock(rdbMutex_);
25 if (rdbStore_ != nullptr) {
26 TAG_LOGD(AAFwkTag::ABILITYMGR, "Ability mgr rdb has existed");
27 return NativeRdb::E_OK;
28 }
29
30 NativeRdb::RdbStoreConfig rdbStoreConfig(amsRdbConfig_.dbPath + amsRdbConfig_.dbName);
31 rdbStoreConfig.SetSecurityLevel(NativeRdb::SecurityLevel::S1);
32
33 int32_t ret = NativeRdb::E_OK;
34 rdbStore_ = NativeRdb::RdbHelper::GetRdbStore(rdbStoreConfig, amsRdbConfig_.version, rdbCallback, ret);
35 if (rdbStore_ == nullptr) {
36 TAG_LOGE(AAFwkTag::ABILITYMGR, "Ability mgr rdb init fail");
37 return NativeRdb::E_ERROR;
38 }
39
40 return NativeRdb::E_OK;
41 }
42
InsertData(const NativeRdb::ValuesBucket & valuesBucket)43 int32_t RdbDataManager::InsertData(const NativeRdb::ValuesBucket &valuesBucket)
44 {
45 std::lock_guard<std::mutex> lock(rdbMutex_);
46 if (rdbStore_ == nullptr) {
47 TAG_LOGE(AAFwkTag::ABILITYMGR, "Rdb store is null");
48 return NativeRdb::E_ERROR;
49 }
50
51 int64_t rowId = -1;
52 return rdbStore_->InsertWithConflictResolution(
53 rowId, amsRdbConfig_.tableName, valuesBucket, NativeRdb::ConflictResolution::ON_CONFLICT_REPLACE);
54 }
55
BatchInsert(int64_t & outInsertNum,const std::vector<NativeRdb::ValuesBucket> & valuesBuckets)56 int32_t RdbDataManager::BatchInsert(int64_t &outInsertNum, const std::vector<NativeRdb::ValuesBucket> &valuesBuckets)
57 {
58 std::lock_guard<std::mutex> lock(rdbMutex_);
59 if (rdbStore_ == nullptr) {
60 TAG_LOGE(AAFwkTag::ABILITYMGR, "Rdb store is null");
61 return NativeRdb::E_ERROR;
62 }
63 auto ret = rdbStore_->BatchInsert(outInsertNum, amsRdbConfig_.tableName, valuesBuckets);
64 return ret == NativeRdb::E_OK;
65 }
66
UpdateData(const NativeRdb::ValuesBucket & valuesBucket,const NativeRdb::AbsRdbPredicates & absRdbPredicates)67 int32_t RdbDataManager::UpdateData(
68 const NativeRdb::ValuesBucket &valuesBucket, const NativeRdb::AbsRdbPredicates &absRdbPredicates)
69 {
70 std::lock_guard<std::mutex> lock(rdbMutex_);
71 if (rdbStore_ == nullptr) {
72 TAG_LOGE(AAFwkTag::ABILITYMGR, "Rdb store is null");
73 return NativeRdb::E_ERROR;
74 }
75 if (absRdbPredicates.GetTableName() != amsRdbConfig_.tableName) {
76 TAG_LOGE(AAFwkTag::ABILITYMGR, "Rdb store table is invalid");
77 return NativeRdb::E_ERROR;
78 }
79 int32_t rowId = -1;
80 return rdbStore_->Update(rowId, valuesBucket, absRdbPredicates);
81 }
82
DeleteData(const NativeRdb::AbsRdbPredicates & absRdbPredicates)83 int32_t RdbDataManager::DeleteData(const NativeRdb::AbsRdbPredicates &absRdbPredicates)
84 {
85 std::lock_guard<std::mutex> lock(rdbMutex_);
86 if (rdbStore_ == nullptr) {
87 TAG_LOGE(AAFwkTag::ABILITYMGR, "Rdb store is null");
88 return NativeRdb::E_ERROR;
89 }
90 if (absRdbPredicates.GetTableName() != amsRdbConfig_.tableName) {
91 TAG_LOGE(AAFwkTag::ABILITYMGR, "Rdb store table is invalid");
92 return NativeRdb::E_ERROR;
93 }
94 int32_t rowId = -1;
95 return rdbStore_->Delete(rowId, absRdbPredicates);
96 }
97
QueryData(const NativeRdb::AbsRdbPredicates & absRdbPredicates)98 std::shared_ptr<NativeRdb::AbsSharedResultSet> RdbDataManager::QueryData(
99 const NativeRdb::AbsRdbPredicates &absRdbPredicates)
100 {
101 std::lock_guard<std::mutex> lock(rdbMutex_);
102 if (rdbStore_ == nullptr) {
103 TAG_LOGE(AAFwkTag::ABILITYMGR, "Rdb store is null");
104 return nullptr;
105 }
106 if (absRdbPredicates.GetTableName() != amsRdbConfig_.tableName) {
107 TAG_LOGE(AAFwkTag::ABILITYMGR, "Rdb store table is invalid");
108 return nullptr;
109 }
110 auto absSharedResultSet = rdbStore_->Query(absRdbPredicates, std::vector<std::string>());
111 if (absSharedResultSet == nullptr || !absSharedResultSet->HasBlock()) {
112 TAG_LOGE(AAFwkTag::ABILITYMGR, "Query data failed.");
113 return nullptr;
114 }
115 return absSharedResultSet;
116 }
117
ClearCache()118 void RdbDataManager::ClearCache()
119 {
120 NativeRdb::RdbHelper::ClearCache();
121 }
122 } // namespace AbilityRuntime
123 } // namespace OHOS