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 }
27
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)28 int RdbResultSetStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option)
29 {
30 ZLOGD("code:%{public}u, callingPid:%{public}d", code, IPCSkeleton::GetCallingPid());
31 if (!CheckInterfaceToken(data) || resultSet_ == nullptr) {
32 return -1;
33 }
34 if (code >= 0 && code < Code::CMD_MAX) {
35 return (this->*HANDLERS[code])(data, reply);
36 }
37 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
38 }
39
CheckInterfaceToken(MessageParcel & data)40 bool RdbResultSetStub::CheckInterfaceToken(MessageParcel& data)
41 {
42 auto localDescriptor = RdbResultSetStub::GetDescriptor();
43 auto remoteDescriptor = data.ReadInterfaceToken();
44 if (remoteDescriptor != localDescriptor) {
45 ZLOGE("interface token is not equal");
46 return false;
47 }
48 return true;
49 }
50
OnGetAllColumnNames(MessageParcel & data,MessageParcel & reply)51 int32_t RdbResultSetStub::OnGetAllColumnNames(MessageParcel &data, MessageParcel &reply)
52 {
53 std::vector<std::string> columnNames;
54 int status = resultSet_->GetAllColumnNames(columnNames);
55 if (!ITypesUtil::Marshal(reply, status, columnNames)) {
56 ZLOGE("Write status or columnNames failed, status:%{public}d, columnNames size:%{public}zu.", status,
57 columnNames.size());
58 return -1;
59 }
60 return 0;
61 }
62
OnGetColumnCount(MessageParcel & data,MessageParcel & reply)63 int32_t RdbResultSetStub::OnGetColumnCount(MessageParcel &data, MessageParcel &reply)
64 {
65 int columnCount = 0;
66 int status = resultSet_->GetColumnCount(columnCount);
67 if (!ITypesUtil::Marshal(reply, status, columnCount)) {
68 ZLOGE("Write status or columnCount failed, status:%{public}d, columnCount:%{public}d.", status, columnCount);
69 return -1;
70 }
71 return 0;
72 }
73
OnGetColumnType(MessageParcel & data,MessageParcel & reply)74 int32_t RdbResultSetStub::OnGetColumnType(MessageParcel &data, MessageParcel &reply)
75 {
76 int columnIndex;
77 ITypesUtil::Unmarshal(data, columnIndex);
78 NativeRdb::ColumnType columnType;
79 int status = resultSet_->GetColumnType(columnIndex, columnType);
80 if (!ITypesUtil::Marshal(reply, status, static_cast<int32_t>(columnType))) {
81 ZLOGE("Write status or columnType failed, status:%{public}d, columnIndex:%{public}d, columnType:%{public}d.",
82 status, columnIndex, static_cast<int32_t>(columnType));
83 return -1;
84 }
85 return 0;
86 }
87
OnGetRowCount(MessageParcel & data,MessageParcel & reply)88 int32_t RdbResultSetStub::OnGetRowCount(MessageParcel &data, MessageParcel &reply)
89 {
90 int rowCount = 0;
91 int status = resultSet_->GetRowCount(rowCount);
92 if (!ITypesUtil::Marshal(reply, status, rowCount)) {
93 ZLOGE("Write status or rowCount failed, status:%{public}d, rowCount:%{public}d.", status, rowCount);
94 return -1;
95 }
96 return 0;
97 }
98
OnGetRowIndex(MessageParcel & data,MessageParcel & reply)99 int32_t RdbResultSetStub::OnGetRowIndex(MessageParcel &data, MessageParcel &reply)
100 {
101 int rowIndex = 0;
102 int status = resultSet_->GetRowIndex(rowIndex);
103 if (!ITypesUtil::Marshal(reply, status, rowIndex)) {
104 ZLOGE("Write status or rowIndex failed, status:%{public}d, rowIndex:%{public}d.", status, rowIndex);
105 return -1;
106 }
107 return 0;
108 }
109
OnGoTo(MessageParcel & data,MessageParcel & reply)110 int32_t RdbResultSetStub::OnGoTo(MessageParcel &data, MessageParcel &reply)
111 {
112 int offSet;
113 ITypesUtil::Unmarshal(data, offSet);
114 int status = resultSet_->GoTo(offSet);
115 if (!ITypesUtil::Marshal(reply, status)) {
116 ZLOGE("Write status failed, status:%{public}d, offSet:%{public}d.", status, offSet);
117 return -1;
118 }
119 return 0;
120 }
121
OnGoToRow(MessageParcel & data,MessageParcel & reply)122 int32_t RdbResultSetStub::OnGoToRow(MessageParcel &data, MessageParcel &reply)
123 {
124 int position;
125 ITypesUtil::Unmarshal(data, position);
126 int status = resultSet_->GoToRow(position);
127 if (!ITypesUtil::Marshal(reply, status)) {
128 ZLOGE("Write status failed, status:%{public}d, position:%{public}d.", status, position);
129 return -1;
130 }
131 return 0;
132 }
133
OnGoToFirstRow(MessageParcel & data,MessageParcel & reply)134 int32_t RdbResultSetStub::OnGoToFirstRow(MessageParcel &data, MessageParcel &reply)
135 {
136 int status = resultSet_->GoToFirstRow();
137 if (!ITypesUtil::Marshal(reply, status)) {
138 ZLOGE("Write status failed, status:%{public}d.", status);
139 return -1;
140 }
141 return 0;
142 }
143
OnGoToLastRow(MessageParcel & data,MessageParcel & reply)144 int32_t RdbResultSetStub::OnGoToLastRow(MessageParcel &data, MessageParcel &reply)
145 {
146 int status = resultSet_->GoToLastRow();
147 if (!ITypesUtil::Marshal(reply, status)) {
148 ZLOGE("Write status failed, status:%{public}d.", status);
149 return -1;
150 }
151 return 0;
152 }
153
OnGoToNextRow(MessageParcel & data,MessageParcel & reply)154 int32_t RdbResultSetStub::OnGoToNextRow(MessageParcel &data, MessageParcel &reply)
155 {
156 int status = resultSet_->GoToNextRow();
157 if (!ITypesUtil::Marshal(reply, status)) {
158 ZLOGE("Write status failed, status:%{public}d.", status);
159 return -1;
160 }
161 return 0;
162 }
163
OnGoToPreviousRow(MessageParcel & data,MessageParcel & reply)164 int32_t RdbResultSetStub::OnGoToPreviousRow(MessageParcel &data, MessageParcel &reply)
165 {
166 int status = resultSet_->GoToPreviousRow();
167 if (!ITypesUtil::Marshal(reply, status)) {
168 ZLOGE("Write status failed, status:%{public}d.", status);
169 return -1;
170 }
171 return 0;
172 }
173
OnIsEnded(MessageParcel & data,MessageParcel & reply)174 int32_t RdbResultSetStub::OnIsEnded(MessageParcel &data, MessageParcel &reply)
175 {
176 bool isEnded = false;
177 int status = resultSet_->IsEnded(isEnded);
178 if (!ITypesUtil::Marshal(reply, status, isEnded)) {
179 ZLOGE("Write status or isEnded failed, status:%{public}d, isEnded:%{public}d.", status, isEnded);
180 return -1;
181 }
182 return 0;
183 }
184
OnIsStarted(MessageParcel & data,MessageParcel & reply)185 int32_t RdbResultSetStub::OnIsStarted(MessageParcel &data, MessageParcel &reply)
186 {
187 bool isStarted = false;
188 int status = resultSet_->IsStarted(isStarted);
189 if (!ITypesUtil::Marshal(reply, status, isStarted)) {
190 ZLOGE("Write status or isStarted failed, status:%{public}d, isStarted:%{public}d.", status, isStarted);
191 return -1;
192 }
193 return 0;
194 }
195
OnIsAtFirstRow(MessageParcel & data,MessageParcel & reply)196 int32_t RdbResultSetStub::OnIsAtFirstRow(MessageParcel &data, MessageParcel &reply)
197 {
198 bool isAtFirstRow = false;
199 int status = resultSet_->IsAtFirstRow(isAtFirstRow);
200 if (!ITypesUtil::Marshal(reply, status, isAtFirstRow)) {
201 ZLOGE("Write status or isAtFirstRow failed, status:%{public}d, isAtFirstRow:%{public}d", status, isAtFirstRow);
202 return -1;
203 }
204 return 0;
205 }
206
OnIsAtLastRow(MessageParcel & data,MessageParcel & reply)207 int32_t RdbResultSetStub::OnIsAtLastRow(MessageParcel &data, MessageParcel &reply)
208 {
209 bool isAtLastRow = false;
210 int status = resultSet_->IsAtLastRow(isAtLastRow);
211 if (!ITypesUtil::Marshal(reply, status, isAtLastRow)) {
212 ZLOGE("Write status or isAtLastRow failed, status:%{public}d, isAtLastRow:%{public}d.", status, isAtLastRow);
213 return -1;
214 }
215 return 0;
216 }
217
OnGet(MessageParcel & data,MessageParcel & reply)218 int32_t RdbResultSetStub::OnGet(MessageParcel &data, MessageParcel &reply)
219 {
220 int columnIndex;
221 ITypesUtil::Unmarshal(data, columnIndex);
222 NativeRdb::ValueObject value;
223 int status = resultSet_->Get(columnIndex, value);
224 if (!ITypesUtil::Marshal(reply, status, value)) {
225 ZLOGE("status:%{public}d, columnIndex:%{public}d", status, columnIndex);
226 return -1;
227 }
228 return 0;
229 }
230
OnGetSize(MessageParcel & data,MessageParcel & reply)231 int32_t RdbResultSetStub::OnGetSize(MessageParcel &data, MessageParcel &reply)
232 {
233 int col;
234 ITypesUtil::Unmarshal(data, col);
235 size_t value = 0;
236 int status = resultSet_->GetSize(col, value);
237 if (!ITypesUtil::Marshal(reply, status, value)) {
238 ZLOGE("failed, status:%{public}d, col:%{public}d, size:%{public}zu", status, col, value);
239 return -1;
240 }
241 return 0;
242 }
243
OnClose(MessageParcel & data,MessageParcel & reply)244 int32_t RdbResultSetStub::OnClose(MessageParcel &data, MessageParcel &reply)
245 {
246 int status = resultSet_->Close();
247 if (!ITypesUtil::Marshal(reply, status)) {
248 ZLOGE("Write status failed, status:%{public}d.", status);
249 return -1;
250 }
251 return 0;
252 }
253 } // namespace OHOS::DistributedRdb