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