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