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 "vcard_rdb_helper.h"
16
17 #include "telephony_errors.h"
18 #include "telephony_log_wrapper.h"
19
20 namespace OHOS {
21 namespace Telephony {
22
23 namespace {
24 OHOS::Uri uriRawContact("datashare:///com.ohos.contactsdataability/contacts/raw_contact");
25 OHOS::Uri uriContactData("datashare:///com.ohos.contactsdataability/contacts/contact_data");
26 OHOS::Uri uriAccount("datashare:///com.ohos.contactsdataability/contacts/account");
27 OHOS::Uri uriContact("datashare:///com.ohos.contactsdataability/contacts/contact");
28 OHOS::Uri uriGroup("datashare:///com.ohos.contactsdataability/contacts/groups");
29 OHOS::Uri uriRawContactMaxId("datashare:///com.ohos.contactsdataability/raw_contact/place_holder");
30
31 } // namespace
32
33 std::shared_ptr<DataShare::DataShareHelper> VCardRdbHelper::dataShareHelper_ = nullptr;
34
VCardRdbHelper()35 VCardRdbHelper::VCardRdbHelper() {}
36
GetInstance()37 VCardRdbHelper &VCardRdbHelper::GetInstance()
38 {
39 static VCardRdbHelper instance;
40 return instance;
41 }
42
QueryRawContactMaxId(int32_t queryNum)43 int32_t VCardRdbHelper::QueryRawContactMaxId(int32_t queryNum)
44 {
45 if (dataShareHelper_ == nullptr) {
46 TELEPHONY_LOGE("dataShareHelper is nullptr");
47 return DB_FAILD;
48 }
49 Uri uriRawContactMaxIdQuery(uriRawContactMaxId.ToString() + "?isFromBatch=true");
50 DataShare::DataShareValuesBucket dbQueryNum;
51 dbQueryNum.Put("importContactNum", queryNum);
52 int32_t queryResult = dataShareHelper_->Insert(uriRawContactMaxIdQuery, dbQueryNum);
53 if (queryResult < 0) {
54 TELEPHONY_LOGE("query RawContactMaxId failed %{public}d", queryResult);
55
56 return DB_FAILD;
57 }
58 TELEPHONY_LOGW("batchInsert rawId: %{public}d", queryResult);
59 return queryResult;
60 }
61
BatchInsertRawContact(const std::vector<DataShare::DataShareValuesBucket> & rawContactValues)62 int32_t VCardRdbHelper::BatchInsertRawContact(const std::vector<DataShare::DataShareValuesBucket> &rawContactValues)
63 {
64 if (dataShareHelper_ == nullptr) {
65 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
66 return DB_FAILD;
67 }
68 Uri uriRawContactBatch(uriRawContact.ToString() + "?isFromBatch=true");
69 int code = dataShareHelper_->BatchInsert(uriRawContactBatch, rawContactValues);
70 TELEPHONY_LOGI("insert code %{public}d", code);
71 return code;
72 }
73
BatchInsertContactData(const std::vector<DataShare::DataShareValuesBucket> & contactsDataValues)74 int32_t VCardRdbHelper::BatchInsertContactData(const std::vector<DataShare::DataShareValuesBucket> &contactsDataValues)
75 {
76 if (dataShareHelper_ == nullptr) {
77 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
78 return DB_FAILD;
79 }
80 Uri uriContactDataBatch(uriContactData.ToString() + "?isFromBatch=true&isSyncFromCloud=true");
81 int code = dataShareHelper_->BatchInsert(uriContactDataBatch, contactsDataValues);
82 TELEPHONY_LOGI("insert code %{public}d", code);
83 return code;
84 }
85
InsertRawContact(const DataShare::DataShareValuesBucket & rawContactValues)86 int32_t VCardRdbHelper::InsertRawContact(const DataShare::DataShareValuesBucket &rawContactValues)
87 {
88 if (dataShareHelper_ == nullptr) {
89 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
90 return DB_FAILD;
91 }
92 int rawContactId = dataShareHelper_->Insert(uriRawContact, rawContactValues);
93 TELEPHONY_LOGI("RawContactInsert insert rawContactId %{public}d", rawContactId);
94 return rawContactId;
95 }
96
InsertContactData(const std::vector<DataShare::DataShareValuesBucket> & contactsDataValues)97 int32_t VCardRdbHelper::InsertContactData(const std::vector<DataShare::DataShareValuesBucket> &contactsDataValues)
98 {
99 if (dataShareHelper_ == nullptr) {
100 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
101 return DB_FAILD;
102 }
103 int code = dataShareHelper_->BatchInsert(uriContactData, contactsDataValues);
104 TELEPHONY_LOGI(" ContactsControl::ContactDataInsert insert code %{public}d", code);
105 return code;
106 }
107
InsertGroupData(const DataShare::DataShareValuesBucket & groupDataValue)108 int32_t VCardRdbHelper::InsertGroupData(const DataShare::DataShareValuesBucket &groupDataValue)
109 {
110 if (dataShareHelper_ == nullptr) {
111 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
112 return DB_FAILD;
113 }
114 int groupId = dataShareHelper_->Insert(uriGroup, groupDataValue);
115 TELEPHONY_LOGI("InsertGroupData insert groupId %{public}d", groupId);
116 return groupId;
117 }
118
QueryGroupData(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)119 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryGroupData(
120 std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
121 {
122 if (dataShareHelper_ == nullptr) {
123 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
124 return nullptr;
125 }
126 std::shared_ptr<DataShare::DataShareResultSet> resultSet =
127 dataShareHelper_->Query(uriGroup, predicates, columns);
128 return resultSet;
129 }
130
QueryGroupId(std::string groupName)131 int32_t VCardRdbHelper::QueryGroupId(std::string groupName)
132 {
133 std::vector<std::string> columns;
134 OHOS::DataShare::DataSharePredicates predicates;
135 predicates.EqualTo(Group::GROUP_NAME, groupName);
136 predicates.EqualTo(Group::GROUP_IS_DELETED, 0);
137 std::shared_ptr<DataShare::DataShareResultSet> resultSet = QueryGroupData(columns, predicates);
138 if (resultSet == nullptr) {
139 TELEPHONY_LOGE("resultSet is nullptr");
140 return DB_FAILD;
141 }
142 int32_t groupId;
143 if (resultSet->GoToFirstRow() == TELEPHONY_ERR_SUCCESS) {
144 int curValueIndex;
145 resultSet->GetColumnIndex(Group::GROUP_ID, curValueIndex);
146 resultSet->GetInt(curValueIndex, groupId);
147 resultSet->Close();
148 return groupId;
149 }
150 resultSet->Close();
151 OHOS::DataShare::DataShareValuesBucket valuesBucket;
152 valuesBucket.Put(Group::GROUP_NAME, groupName);
153 valuesBucket.Put(Group::GROUP_ACCOUNT_ID, 1);
154 return VCardRdbHelper::InsertGroupData(valuesBucket);
155 }
156
QueryAccount(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)157 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryAccount(
158 std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
159 {
160 if (dataShareHelper_ == nullptr) {
161 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
162 return nullptr;
163 }
164 std::shared_ptr<DataShare::DataShareResultSet> resultSet = dataShareHelper_->Query(uriAccount, predicates, columns);
165 return resultSet;
166 }
167
QueryContact(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)168 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryContact(
169 std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
170 {
171 if (dataShareHelper_ == nullptr) {
172 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
173 return nullptr;
174 }
175 std::shared_ptr<DataShare::DataShareResultSet> resultSet = dataShareHelper_->Query(uriContact, predicates, columns);
176 return resultSet;
177 }
178
QueryRawContact(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)179 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryRawContact(
180 std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
181 {
182 if (dataShareHelper_ == nullptr) {
183 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
184 return nullptr;
185 }
186 std::shared_ptr<DataShare::DataShareResultSet> resultSet =
187 dataShareHelper_->Query(uriRawContact, predicates, columns);
188 return resultSet;
189 }
190
QueryContactData(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)191 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryContactData(
192 std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
193 {
194 if (dataShareHelper_ == nullptr) {
195 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
196 return nullptr;
197 }
198 std::shared_ptr<DataShare::DataShareResultSet> resultSet =
199 dataShareHelper_->Query(uriContactData, predicates, columns);
200 return resultSet;
201 }
202
SetDataHelper(std::shared_ptr<DataShare::DataShareHelper> dataShareHelper)203 void VCardRdbHelper::SetDataHelper(std::shared_ptr<DataShare::DataShareHelper> dataShareHelper)
204 {
205 dataShareHelper_ = dataShareHelper;
206 }
207
Release()208 void VCardRdbHelper::Release()
209 {
210 if (dataShareHelper_ != nullptr) {
211 dataShareHelper_->Release();
212 dataShareHelper_ = nullptr;
213 }
214 }
215
216 } // namespace Telephony
217 } // namespace OHOS
218