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 uriRawContactMaxId("datashare:///com.ohos.contactsdataability/raw_contact/place_holder");
29
30 } // namespace
31
32 std::shared_ptr<DataShare::DataShareHelper> VCardRdbHelper::dataShareHelper_ = nullptr;
33
VCardRdbHelper()34 VCardRdbHelper::VCardRdbHelper() {}
35
GetInstance()36 VCardRdbHelper &VCardRdbHelper::GetInstance()
37 {
38 static VCardRdbHelper instance;
39 return instance;
40 }
41
QueryRawContactMaxId(int32_t queryNum)42 int32_t VCardRdbHelper::QueryRawContactMaxId(int32_t queryNum)
43 {
44 if (dataShareHelper_ == nullptr) {
45 TELEPHONY_LOGE("dataShareHelper is nullptr");
46 return DB_FAILD;
47 }
48 Uri uriRawContactMaxIdQuery(uriRawContactMaxId.ToString() + "?isFromBatch=true");
49 DataShare::DataShareValuesBucket dbQueryNum;
50 dbQueryNum.Put("importContactNum", queryNum);
51 int32_t queryResult = dataShareHelper_->Insert(uriRawContactMaxIdQuery, dbQueryNum);
52 if (queryResult < 0) {
53 TELEPHONY_LOGE("query RawContactMaxId failed %{public}d", queryResult);
54
55 return DB_FAILD;
56 }
57 TELEPHONY_LOGW("batchInsert rawId: %{public}d", queryResult);
58 return queryResult;
59 }
60
BatchInsertRawContact(const std::vector<DataShare::DataShareValuesBucket> & rawContactValues)61 int32_t VCardRdbHelper::BatchInsertRawContact(const std::vector<DataShare::DataShareValuesBucket> &rawContactValues)
62 {
63 if (dataShareHelper_ == nullptr) {
64 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
65 return DB_FAILD;
66 }
67 Uri uriRawContactBatch(uriRawContact.ToString() + "?isFromBatch=true");
68 int code = dataShareHelper_->BatchInsert(uriRawContactBatch, rawContactValues);
69 TELEPHONY_LOGI("insert code %{public}d", code);
70 return code;
71 }
72
BatchInsertContactData(const std::vector<DataShare::DataShareValuesBucket> & contactsDataValues)73 int32_t VCardRdbHelper::BatchInsertContactData(const std::vector<DataShare::DataShareValuesBucket> &contactsDataValues)
74 {
75 if (dataShareHelper_ == nullptr) {
76 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
77 return DB_FAILD;
78 }
79 Uri uriContactDataBatch(uriContactData.ToString() + "?isFromBatch=true&isSyncFromCloud=true");
80 int code = dataShareHelper_->BatchInsert(uriContactDataBatch, contactsDataValues);
81 TELEPHONY_LOGI("insert code %{public}d", code);
82 return code;
83 }
84
InsertRawContact(const DataShare::DataShareValuesBucket & rawContactValues)85 int32_t VCardRdbHelper::InsertRawContact(const DataShare::DataShareValuesBucket &rawContactValues)
86 {
87 if (dataShareHelper_ == nullptr) {
88 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
89 return DB_FAILD;
90 }
91 int rawContactId = dataShareHelper_->Insert(uriRawContact, rawContactValues);
92 TELEPHONY_LOGI("RawContactInsert insert rawContactId %{public}d", rawContactId);
93 return rawContactId;
94 }
95
InsertContactData(const std::vector<DataShare::DataShareValuesBucket> & contactsDataValues)96 int32_t VCardRdbHelper::InsertContactData(const std::vector<DataShare::DataShareValuesBucket> &contactsDataValues)
97 {
98 if (dataShareHelper_ == nullptr) {
99 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
100 return DB_FAILD;
101 }
102 int code = dataShareHelper_->BatchInsert(uriContactData, contactsDataValues);
103 TELEPHONY_LOGI(" ContactsControl::ContactDataInsert insert code %{public}d", code);
104 return code;
105 }
106
QueryAccount(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)107 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryAccount(
108 std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
109 {
110 if (dataShareHelper_ == nullptr) {
111 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
112 return nullptr;
113 }
114 std::shared_ptr<DataShare::DataShareResultSet> resultSet = dataShareHelper_->Query(uriAccount, predicates, columns);
115 return resultSet;
116 }
117
QueryContact(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)118 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryContact(
119 std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
120 {
121 if (dataShareHelper_ == nullptr) {
122 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
123 return nullptr;
124 }
125 std::shared_ptr<DataShare::DataShareResultSet> resultSet = dataShareHelper_->Query(uriContact, predicates, columns);
126 return resultSet;
127 }
128
QueryRawContact(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)129 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryRawContact(
130 std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
131 {
132 if (dataShareHelper_ == nullptr) {
133 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
134 return nullptr;
135 }
136 std::shared_ptr<DataShare::DataShareResultSet> resultSet =
137 dataShareHelper_->Query(uriRawContact, predicates, columns);
138 return resultSet;
139 }
140
QueryContactData(std::vector<std::string> & columns,const DataShare::DataSharePredicates & predicates)141 std::shared_ptr<DataShare::DataShareResultSet> VCardRdbHelper::QueryContactData(
142 std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates)
143 {
144 if (dataShareHelper_ == nullptr) {
145 TELEPHONY_LOGE("dataShareHelper_ is nullptr");
146 return nullptr;
147 }
148 std::shared_ptr<DataShare::DataShareResultSet> resultSet =
149 dataShareHelper_->Query(uriContactData, predicates, columns);
150 return resultSet;
151 }
152
SetDataHelper(std::shared_ptr<DataShare::DataShareHelper> dataShareHelper)153 void VCardRdbHelper::SetDataHelper(std::shared_ptr<DataShare::DataShareHelper> dataShareHelper)
154 {
155 dataShareHelper_ = dataShareHelper;
156 }
157
Release()158 void VCardRdbHelper::Release()
159 {
160 if (dataShareHelper_ != nullptr) {
161 dataShareHelper_->Release();
162 dataShareHelper_ = nullptr;
163 }
164 }
165
166 } // namespace Telephony
167 } // namespace OHOS
168