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