• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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