1 /*
2 * Copyright (c) 2022 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
16 #define LOG_TAG "RdbResultSetStub"
17
18 #include <ipc_skeleton.h>
19 #include "itypes_util.h"
20 #include "log_print.h"
21 #include "rdb_result_set_stub.h"
22
23 namespace OHOS::DistributedRdb {
RdbResultSetStub(std::shared_ptr<NativeRdb::ResultSet> resultSet)24 RdbResultSetStub::RdbResultSetStub(std::shared_ptr<NativeRdb::ResultSet> resultSet) : resultSet_(std::move(resultSet))
25 {
26 }
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)27 int RdbResultSetStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option)
28 {
29 ZLOGD("code:%{public}u, callingPid:%{public}d", code, IPCSkeleton::GetCallingPid());
30 if (!CheckInterfaceToken(data) || resultSet_ == nullptr) {
31 return -1;
32 }
33 if (code >= 0 && code < Code::CMD_MAX) {
34 return (this->*HANDLERS[code])(data, reply);
35 }
36 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
37 }
38
CheckInterfaceToken(MessageParcel & data)39 bool RdbResultSetStub::CheckInterfaceToken(MessageParcel& data)
40 {
41 auto localDescriptor = RdbResultSetStub::GetDescriptor();
42 auto remoteDescriptor = data.ReadInterfaceToken();
43 if (remoteDescriptor != localDescriptor) {
44 ZLOGE("interface token is not equal");
45 return false;
46 }
47 return true;
48 }
49
OnGetAllColumnNames(MessageParcel & data,MessageParcel & reply)50 int32_t RdbResultSetStub::OnGetAllColumnNames(MessageParcel &data, MessageParcel &reply)
51 {
52 std::vector<std::string> columnNames;
53 int status = resultSet_->GetAllColumnNames(columnNames);
54 if (!ITypesUtil::Marshal(reply, status, columnNames)) {
55 ZLOGE("Write status or columnNames failed, status:%{public}d, columnNames size:%{public}zu.", status,
56 columnNames.size());
57 return -1;
58 }
59 return 0;
60 }
61
OnGetColumnCount(MessageParcel & data,MessageParcel & reply)62 int32_t RdbResultSetStub::OnGetColumnCount(MessageParcel &data, MessageParcel &reply)
63 {
64 int columnCount = 0;
65 int status = resultSet_->GetColumnCount(columnCount);
66 if (!ITypesUtil::Marshal(reply, status, columnCount)) {
67 ZLOGE("Write status or columnCount failed, status:%{public}d, columnCount:%{public}d.", status, columnCount);
68 return -1;
69 }
70 return 0;
71 }
72
OnGetColumnType(MessageParcel & data,MessageParcel & reply)73 int32_t RdbResultSetStub::OnGetColumnType(MessageParcel &data, MessageParcel &reply)
74 {
75 int columnIndex;
76 ITypesUtil::Unmarshal(data, columnIndex);
77 NativeRdb::ColumnType columnType;
78 int status = resultSet_->GetColumnType(columnIndex, columnType);
79 if (!ITypesUtil::Marshal(reply, status, static_cast<int32_t>(columnType))) {
80 ZLOGE("Write status or columnType failed, status:%{public}d, columnIndex:%{public}d, columnType:%{public}d.",
81 status, columnIndex, static_cast<int32_t>(columnType));
82 return -1;
83 }
84 return 0;
85 }
86
OnGetColumnIndex(MessageParcel & data,MessageParcel & reply)87 int32_t RdbResultSetStub::OnGetColumnIndex(MessageParcel &data, MessageParcel &reply)
88 {
89 std::string columnName;
90 ITypesUtil::Unmarshal(data, columnName);
91 int columnIndex;
92 int status = resultSet_->GetColumnIndex(columnName, columnIndex);
93 if (!ITypesUtil::Marshal(reply, status, columnIndex)) {
94 ZLOGE("Write status or columnIndex failed, status:%{public}d, columnIndex:%{public}d, columnName:%{public}s.",
95 status, columnIndex, columnName.c_str());
96 return -1;
97 }
98 return 0;
99 }
100
OnGetColumnName(MessageParcel & data,MessageParcel & reply)101 int32_t RdbResultSetStub::OnGetColumnName(MessageParcel &data, MessageParcel &reply)
102 {
103 int columnIndex;
104 ITypesUtil::Unmarshal(data, columnIndex);
105 std::string columnName;
106 int status = resultSet_->GetColumnName(columnIndex, columnName);
107 if (!ITypesUtil::Marshal(reply, status, columnName)) {
108 ZLOGE("Write status or columnName failed, status:%{public}d, columnIndex:%{public}d, columnName:%{public}s.",
109 status, columnIndex, columnName.c_str());
110 return -1;
111 }
112 return 0;
113 }
114
OnGetRowCount(MessageParcel & data,MessageParcel & reply)115 int32_t RdbResultSetStub::OnGetRowCount(MessageParcel &data, MessageParcel &reply)
116 {
117 int rowCount = 0;
118 int status = resultSet_->GetRowCount(rowCount);
119 if (!ITypesUtil::Marshal(reply, status, rowCount)) {
120 ZLOGE("Write status or rowCount failed, status:%{public}d, rowCount:%{public}d.", status, rowCount);
121 return -1;
122 }
123 return 0;
124 }
125
OnGetRowIndex(MessageParcel & data,MessageParcel & reply)126 int32_t RdbResultSetStub::OnGetRowIndex(MessageParcel &data, MessageParcel &reply)
127 {
128 int rowIndex = 0;
129 int status = resultSet_->GetRowIndex(rowIndex);
130 if (!ITypesUtil::Marshal(reply, status, rowIndex)) {
131 ZLOGE("Write status or rowIndex failed, status:%{public}d, rowIndex:%{public}d.", status, rowIndex);
132 return -1;
133 }
134 return 0;
135 }
136
OnGoTo(MessageParcel & data,MessageParcel & reply)137 int32_t RdbResultSetStub::OnGoTo(MessageParcel &data, MessageParcel &reply)
138 {
139 int offSet;
140 ITypesUtil::Unmarshal(data, offSet);
141 int status = resultSet_->GoTo(offSet);
142 if (!ITypesUtil::Marshal(reply, status)) {
143 ZLOGE("Write status failed, status:%{public}d, offSet:%{public}d.", status, offSet);
144 return -1;
145 }
146 return 0;
147 }
148
OnGoToRow(MessageParcel & data,MessageParcel & reply)149 int32_t RdbResultSetStub::OnGoToRow(MessageParcel &data, MessageParcel &reply)
150 {
151 int position;
152 ITypesUtil::Unmarshal(data, position);
153 int status = resultSet_->GoToRow(position);
154 if (!ITypesUtil::Marshal(reply, status)) {
155 ZLOGE("Write status failed, status:%{public}d, position:%{public}d.", status, position);
156 return -1;
157 }
158 return 0;
159 }
160
OnGoToFirstRow(MessageParcel & data,MessageParcel & reply)161 int32_t RdbResultSetStub::OnGoToFirstRow(MessageParcel &data, MessageParcel &reply)
162 {
163 int status = resultSet_->GoToFirstRow();
164 if (!ITypesUtil::Marshal(reply, status)) {
165 ZLOGE("Write status failed, status:%{public}d.", status);
166 return -1;
167 }
168 return 0;
169 }
170
OnGoToLastRow(MessageParcel & data,MessageParcel & reply)171 int32_t RdbResultSetStub::OnGoToLastRow(MessageParcel &data, MessageParcel &reply)
172 {
173 int status = resultSet_->GoToLastRow();
174 if (!ITypesUtil::Marshal(reply, status)) {
175 ZLOGE("Write status failed, status:%{public}d.", status);
176 return -1;
177 }
178 return 0;
179 }
180
OnGoToNextRow(MessageParcel & data,MessageParcel & reply)181 int32_t RdbResultSetStub::OnGoToNextRow(MessageParcel &data, MessageParcel &reply)
182 {
183 int status = resultSet_->GoToNextRow();
184 if (!ITypesUtil::Marshal(reply, status)) {
185 ZLOGE("Write status failed, status:%{public}d.", status);
186 return -1;
187 }
188 return 0;
189 }
190
OnGoToPreviousRow(MessageParcel & data,MessageParcel & reply)191 int32_t RdbResultSetStub::OnGoToPreviousRow(MessageParcel &data, MessageParcel &reply)
192 {
193 int status = resultSet_->GoToPreviousRow();
194 if (!ITypesUtil::Marshal(reply, status)) {
195 ZLOGE("Write status failed, status:%{public}d.", status);
196 return -1;
197 }
198 return 0;
199 }
200
OnIsEnded(MessageParcel & data,MessageParcel & reply)201 int32_t RdbResultSetStub::OnIsEnded(MessageParcel &data, MessageParcel &reply)
202 {
203 bool isEnded = false;
204 int status = resultSet_->IsEnded(isEnded);
205 if (!ITypesUtil::Marshal(reply, status, isEnded)) {
206 ZLOGE("Write status or isEnded failed, status:%{public}d, isEnded:%{public}d.", status, isEnded);
207 return -1;
208 }
209 return 0;
210 }
211
OnIsStarted(MessageParcel & data,MessageParcel & reply)212 int32_t RdbResultSetStub::OnIsStarted(MessageParcel &data, MessageParcel &reply)
213 {
214 bool isStarted = false;
215 int status = resultSet_->IsStarted(isStarted);
216 if (!ITypesUtil::Marshal(reply, status, isStarted)) {
217 ZLOGE("Write status or isStarted failed, status:%{public}d, isStarted:%{public}d.", status, isStarted);
218 return -1;
219 }
220 return 0;
221 }
222
OnIsAtFirstRow(MessageParcel & data,MessageParcel & reply)223 int32_t RdbResultSetStub::OnIsAtFirstRow(MessageParcel &data, MessageParcel &reply)
224 {
225 bool isAtFirstRow = false;
226 int status = resultSet_->IsAtFirstRow(isAtFirstRow);
227 if (!ITypesUtil::Marshal(reply, status, isAtFirstRow)) {
228 ZLOGE("Write status or isAtFirstRow failed, status:%{public}d, isAtFirstRow:%{public}d", status, isAtFirstRow);
229 return -1;
230 }
231 return 0;
232 }
233
OnIsAtLastRow(MessageParcel & data,MessageParcel & reply)234 int32_t RdbResultSetStub::OnIsAtLastRow(MessageParcel &data, MessageParcel &reply)
235 {
236 bool isAtLastRow = false;
237 int status = resultSet_->IsAtLastRow(isAtLastRow);
238 if (!ITypesUtil::Marshal(reply, status, isAtLastRow)) {
239 ZLOGE("Write status or isAtLastRow failed, status:%{public}d, isAtLastRow:%{public}d.", status, isAtLastRow);
240 return -1;
241 }
242 return 0;
243 }
244
OnGetBlob(MessageParcel & data,MessageParcel & reply)245 int32_t RdbResultSetStub::OnGetBlob(MessageParcel &data, MessageParcel &reply)
246 {
247 int columnIndex;
248 ITypesUtil::Unmarshal(data, columnIndex);
249 std::vector<uint8_t> blob;
250 int status = resultSet_->GetBlob(columnIndex, blob);
251 if (!ITypesUtil::Marshal(reply, status, blob)) {
252 ZLOGE("Write status or blob failed, status:%{public}d, columnIndex:%{public}d.", status, columnIndex);
253 return -1;
254 }
255 return 0;
256 }
257
OnGetString(MessageParcel & data,MessageParcel & reply)258 int32_t RdbResultSetStub::OnGetString(MessageParcel &data, MessageParcel &reply)
259 {
260 int columnIndex;
261 ITypesUtil::Unmarshal(data, columnIndex);
262 std::string value;
263 int status = resultSet_->GetString(columnIndex, value);
264 if (!ITypesUtil::Marshal(reply, status, value)) {
265 ZLOGE("Write status or string value failed, status:%{public}d, columnIndex:%{public}d.", status, columnIndex);
266 return -1;
267 }
268 return 0;
269 }
270
OnGetInt(MessageParcel & data,MessageParcel & reply)271 int32_t RdbResultSetStub::OnGetInt(MessageParcel &data, MessageParcel &reply)
272 {
273 int columnIndex;
274 ITypesUtil::Unmarshal(data, columnIndex);
275 int value;
276 int status = resultSet_->GetInt(columnIndex, value);
277 if (!ITypesUtil::Marshal(reply, status, value)) {
278 ZLOGE("Write status or int value failed, status:%{public}d, columnIndex:%{public}d", status, columnIndex);
279 return -1;
280 }
281 return 0;
282 }
283
OnGetLong(MessageParcel & data,MessageParcel & reply)284 int32_t RdbResultSetStub::OnGetLong(MessageParcel &data, MessageParcel &reply)
285 {
286 int columnIndex;
287 ITypesUtil::Unmarshal(data, columnIndex);
288 int64_t value;
289 int status = resultSet_->GetLong(columnIndex, value);
290 if (!ITypesUtil::Marshal(reply, status, value)) {
291 ZLOGE("Write status or long value failed, status:%{public}d, columnIndex:%{public}d", status, columnIndex);
292 return -1;
293 }
294 return 0;
295 }
296
OnGetDouble(MessageParcel & data,MessageParcel & reply)297 int32_t RdbResultSetStub::OnGetDouble(MessageParcel &data, MessageParcel &reply)
298 {
299 int columnIndex;
300 ITypesUtil::Unmarshal(data, columnIndex);
301 double value;
302 int status = resultSet_->GetDouble(columnIndex, value);
303 if (!ITypesUtil::Marshal(reply, status, value)) {
304 ZLOGE("Write status or double value failed, status:%{public}d, columnIndex:%{public}d", status, columnIndex);
305 return -1;
306 }
307 return 0;
308 }
309
OnIsColumnNull(MessageParcel & data,MessageParcel & reply)310 int32_t RdbResultSetStub::OnIsColumnNull(MessageParcel &data, MessageParcel &reply)
311 {
312 int columnIndex;
313 ITypesUtil::Unmarshal(data, columnIndex);
314 bool isColumnNull;
315 int status = resultSet_->IsColumnNull(columnIndex, isColumnNull);
316 if (!ITypesUtil::Marshal(reply, status, isColumnNull)) {
317 ZLOGE("Write status or isColumnNull failed, status:%{public}d, columnIndex:%{public}d.", status, columnIndex);
318 return -1;
319 }
320 return 0;
321 }
322
OnIsClosed(MessageParcel & data,MessageParcel & reply)323 int32_t RdbResultSetStub::OnIsClosed(MessageParcel &data, MessageParcel &reply)
324 {
325 bool isClosed = resultSet_->IsClosed();
326 if (!ITypesUtil::Marshal(reply, isClosed)) {
327 ZLOGE("Write isClosed failed, isClosed:%{public}d.", isClosed);
328 return -1;
329 }
330 return 0;
331 }
332
OnClose(MessageParcel & data,MessageParcel & reply)333 int32_t RdbResultSetStub::OnClose(MessageParcel &data, MessageParcel &reply)
334 {
335 int status = resultSet_->Close();
336 if (!ITypesUtil::Marshal(reply, status)) {
337 ZLOGE("Write status failed, status:%{public}d.", status);
338 return -1;
339 }
340 return 0;
341 }
342 } // namespace OHOS::DistributedRdb