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