1 /*
2 * Copyright (c) 2024 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 #define LOG_TAG "DataValues"
16
17 #include "oh_data_values.h"
18 #include "oh_data_define.h"
19 #include "relational_store_error_code.h"
20 #include "logger.h"
21
22 using namespace OHOS::RdbNdk;
23
IsValidValues(const OH_Data_Values * values)24 static bool IsValidValues(const OH_Data_Values *values)
25 {
26 if (values == nullptr) {
27 LOG_ERROR("values is null.");
28 return false;
29 }
30 bool ret = values->IsValid();
31 if (!ret) {
32 LOG_ERROR("invalid data values object.");
33 }
34 return ret;
35 }
36
IsValidValuesElement(OH_Data_Values * values,int index)37 static bool IsValidValuesElement(OH_Data_Values *values, int index)
38 {
39 if (!IsValidValues(values) || index < 0 || static_cast<size_t>(index) >= values->values_.size()) {
40 return false;
41 }
42 return true;
43 }
44
OH_Values_Create(void)45 OH_Data_Values *OH_Values_Create(void)
46 {
47 OH_Data_Values *values = new (std::nothrow) OH_Data_Values;
48 return values;
49 }
50
OH_Values_Destroy(OH_Data_Values * values)51 int OH_Values_Destroy(OH_Data_Values *values)
52 {
53 if (!IsValidValues(values)) {
54 return RDB_E_INVALID_ARGS;
55 }
56 delete values;
57 return RDB_OK;
58 }
59
OH_Values_Put(OH_Data_Values * values,const OH_Data_Value * val)60 int OH_Values_Put(OH_Data_Values *values, const OH_Data_Value *val)
61 {
62 if (!IsValidValues(values) || (val == nullptr) || !val->IsValid()) {
63 return RDB_E_INVALID_ARGS;
64 }
65 values->values_.push_back(*val);
66 return RDB_OK;
67 }
68
OH_Values_PutNull(OH_Data_Values * values)69 int OH_Values_PutNull(OH_Data_Values *values)
70 {
71 if (!IsValidValues(values)) {
72 return RDB_E_INVALID_ARGS;
73 }
74 OH_Data_Value nullValue;
75 int ret = OH_Value_PutNull(&nullValue);
76 if (ret != RDB_OK) {
77 return ret;
78 }
79 values->values_.push_back(nullValue);
80 return RDB_OK;
81 }
82
OH_Values_PutInt(OH_Data_Values * values,int64_t val)83 int OH_Values_PutInt(OH_Data_Values *values, int64_t val)
84 {
85 if (!IsValidValues(values)) {
86 return RDB_E_INVALID_ARGS;
87 }
88 OH_Data_Value intValue;
89 int ret = OH_Value_PutInt(&intValue, val);
90 if (ret != RDB_OK) {
91 return ret;
92 }
93 values->values_.push_back(intValue);
94 return RDB_OK;
95 }
96
OH_Values_PutReal(OH_Data_Values * values,double val)97 int OH_Values_PutReal(OH_Data_Values *values, double val)
98 {
99 if (!IsValidValues(values)) {
100 return RDB_E_INVALID_ARGS;
101 }
102 OH_Data_Value realValue;
103 int ret = OH_Value_PutReal(&realValue, val);
104 if (ret != RDB_OK) {
105 return ret;
106 }
107 values->values_.push_back(realValue);
108 return RDB_OK;
109 }
110
OH_Values_PutText(OH_Data_Values * values,const char * val)111 int OH_Values_PutText(OH_Data_Values *values, const char *val)
112 {
113 if (!IsValidValues(values)) {
114 return RDB_E_INVALID_ARGS;
115 }
116 OH_Data_Value textValue;
117 int ret = OH_Value_PutText(&textValue, val);
118 if (ret != RDB_OK) {
119 return ret;
120 }
121 values->values_.push_back(textValue);
122 return RDB_OK;
123 }
124
OH_Values_PutBlob(OH_Data_Values * values,const unsigned char * val,size_t length)125 int OH_Values_PutBlob(OH_Data_Values *values, const unsigned char *val, size_t length)
126 {
127 if (!IsValidValues(values)) {
128 return RDB_E_INVALID_ARGS;
129 }
130 OH_Data_Value blobValue;
131 int ret = OH_Value_PutBlob(&blobValue, val, length);
132 if (ret != RDB_OK) {
133 return ret;
134 }
135 values->values_.push_back(blobValue);
136 return RDB_OK;
137 }
138
OH_Values_PutAsset(OH_Data_Values * values,const Data_Asset * val)139 int OH_Values_PutAsset(OH_Data_Values *values, const Data_Asset *val)
140 {
141 if (!IsValidValues(values)) {
142 return RDB_E_INVALID_ARGS;
143 }
144 OH_Data_Value assetValue;
145 int ret = OH_Value_PutAsset(&assetValue, val);
146 if (ret != RDB_OK) {
147 return ret;
148 }
149 values->values_.push_back(assetValue);
150 return RDB_OK;
151 }
152
OH_Values_PutAssets(OH_Data_Values * values,const Data_Asset * const * val,size_t length)153 int OH_Values_PutAssets(OH_Data_Values *values, const Data_Asset * const * val, size_t length)
154 {
155 if (!IsValidValues(values)) {
156 return RDB_E_INVALID_ARGS;
157 }
158 OH_Data_Value assetsValue;
159 int ret = OH_Value_PutAssets(&assetsValue, val, length);
160 if (ret != RDB_OK) {
161 return ret;
162 }
163 values->values_.push_back(assetsValue);
164 return RDB_OK;
165 }
166
OH_Values_PutFloatVector(OH_Data_Values * values,const float * val,size_t length)167 int OH_Values_PutFloatVector(OH_Data_Values *values, const float *val, size_t length)
168 {
169 if (!IsValidValues(values)) {
170 return RDB_E_INVALID_ARGS;
171 }
172 OH_Data_Value floatVectorValue;
173 int ret = OH_Value_PutFloatVector(&floatVectorValue, val, length);
174 if (ret != RDB_OK) {
175 return ret;
176 }
177 values->values_.push_back(floatVectorValue);
178 return RDB_OK;
179 }
180
OH_Values_PutUnlimitedInt(OH_Data_Values * values,int sign,const uint64_t * trueForm,size_t length)181 int OH_Values_PutUnlimitedInt(OH_Data_Values *values, int sign, const uint64_t *trueForm, size_t length)
182 {
183 if (!IsValidValues(values)) {
184 return RDB_E_INVALID_ARGS;
185 }
186 OH_Data_Value unlimitedIntValue;
187 int ret = OH_Value_PutUnlimitedInt(&unlimitedIntValue, sign, trueForm, length);
188 if (ret != RDB_OK) {
189 return ret;
190 }
191 values->values_.push_back(unlimitedIntValue);
192 return RDB_OK;
193 }
194
OH_Values_Count(OH_Data_Values * values,size_t * count)195 int OH_Values_Count(OH_Data_Values *values, size_t *count)
196 {
197 if (!IsValidValues(values) || count == nullptr) {
198 return RDB_E_INVALID_ARGS;
199 }
200 *count = values->values_.size();
201 return RDB_OK;
202 }
203
OH_Values_GetType(OH_Data_Values * values,int index,OH_ColumnType * type)204 int OH_Values_GetType(OH_Data_Values *values, int index, OH_ColumnType *type)
205 {
206 if (!IsValidValuesElement(values, index)) {
207 return RDB_E_INVALID_ARGS;
208 }
209 return OH_Value_GetType(&values->values_[index], type);
210 }
211
OH_Values_Get(OH_Data_Values * values,int index,OH_Data_Value ** val)212 int OH_Values_Get(OH_Data_Values *values, int index, OH_Data_Value **val)
213 {
214 if (!IsValidValuesElement(values, index) || val == nullptr) {
215 return RDB_E_INVALID_ARGS;
216 }
217 *val = &values->values_[index];
218 return RDB_OK;
219 }
220
OH_Values_IsNull(OH_Data_Values * values,int index,bool * val)221 int OH_Values_IsNull(OH_Data_Values *values, int index, bool *val)
222 {
223 if (!IsValidValuesElement(values, index)) {
224 return RDB_E_INVALID_ARGS;
225 }
226 return OH_Value_IsNull(&values->values_[index], val);
227 }
228
OH_Values_GetInt(OH_Data_Values * values,int index,int64_t * val)229 int OH_Values_GetInt(OH_Data_Values *values, int index, int64_t *val)
230 {
231 if (!IsValidValuesElement(values, index)) {
232 return RDB_E_INVALID_ARGS;
233 }
234 return OH_Value_GetInt(&values->values_[index], val);
235 }
236
OH_Values_GetReal(OH_Data_Values * values,int index,double * val)237 int OH_Values_GetReal(OH_Data_Values *values, int index, double *val)
238 {
239 if (!IsValidValuesElement(values, index)) {
240 return RDB_E_INVALID_ARGS;
241 }
242 return OH_Value_GetReal(&values->values_[index], val);
243 }
244
OH_Values_GetText(OH_Data_Values * values,int index,const char ** val)245 int OH_Values_GetText(OH_Data_Values *values, int index, const char **val)
246 {
247 if (!IsValidValuesElement(values, index)) {
248 return RDB_E_INVALID_ARGS;
249 }
250 return OH_Value_GetText(&values->values_[index], val);
251 }
252
OH_Values_GetBlob(OH_Data_Values * values,int index,const uint8_t ** val,size_t * length)253 int OH_Values_GetBlob(OH_Data_Values *values, int index, const uint8_t **val, size_t *length)
254 {
255 if (!IsValidValuesElement(values, index)) {
256 return RDB_E_INVALID_ARGS;
257 }
258 return OH_Value_GetBlob(&values->values_[index], val, length);
259 }
260
OH_Values_GetAsset(OH_Data_Values * values,int index,Data_Asset * val)261 int OH_Values_GetAsset(OH_Data_Values *values, int index, Data_Asset *val)
262 {
263 if (!IsValidValuesElement(values, index)) {
264 return RDB_E_INVALID_ARGS;
265 }
266 return OH_Value_GetAsset(&values->values_[index], val);
267 }
268
OH_Values_GetAssetsCount(OH_Data_Values * values,int index,size_t * length)269 int OH_Values_GetAssetsCount(OH_Data_Values *values, int index, size_t *length)
270 {
271 if (!IsValidValuesElement(values, index)) {
272 return RDB_E_INVALID_ARGS;
273 }
274 return OH_Value_GetAssetsCount(&values->values_[index], length);
275 }
276
OH_Values_GetAssets(OH_Data_Values * values,int index,Data_Asset ** val,size_t inLen,size_t * outLen)277 int OH_Values_GetAssets(OH_Data_Values *values, int index, Data_Asset **val, size_t inLen, size_t *outLen)
278 {
279 if (!IsValidValuesElement(values, index)) {
280 return RDB_E_INVALID_ARGS;
281 }
282 return OH_Value_GetAssets(&values->values_[index], val, inLen, outLen);
283 }
284
OH_Values_GetFloatVectorCount(OH_Data_Values * values,int index,size_t * length)285 int OH_Values_GetFloatVectorCount(OH_Data_Values *values, int index, size_t *length)
286 {
287 if (!IsValidValuesElement(values, index)) {
288 return RDB_E_INVALID_ARGS;
289 }
290 return OH_Value_GetFloatVectorCount(&values->values_[index], length);
291 }
292
OH_Values_GetFloatVector(OH_Data_Values * values,int index,float * val,size_t inLen,size_t * outLen)293 int OH_Values_GetFloatVector(OH_Data_Values *values, int index, float *val, size_t inLen, size_t *outLen)
294 {
295 if (!IsValidValuesElement(values, index)) {
296 return RDB_E_INVALID_ARGS;
297 }
298 return OH_Value_GetFloatVector(&values->values_[index], val, inLen, outLen);
299 }
300
OH_Values_GetUnlimitedIntBand(OH_Data_Values * values,int index,size_t * length)301 int OH_Values_GetUnlimitedIntBand(OH_Data_Values *values, int index, size_t *length)
302 {
303 if (!IsValidValuesElement(values, index)) {
304 return RDB_E_INVALID_ARGS;
305 }
306 return OH_Value_GetUnlimitedIntBand(&values->values_[index], length);
307 }
308
OH_Values_GetUnlimitedInt(OH_Data_Values * values,int index,int * sign,uint64_t * trueForm,size_t inLen,size_t * outLen)309 int OH_Values_GetUnlimitedInt(OH_Data_Values *values, int index, int *sign, uint64_t *trueForm, size_t inLen,
310 size_t *outLen)
311 {
312 if (!IsValidValuesElement(values, index)) {
313 return RDB_E_INVALID_ARGS;
314 }
315 return OH_Value_GetUnlimitedInt(&values->values_[index], sign, trueForm, inLen, outLen);
316 }
317
IsValid() const318 bool OH_Data_Values::IsValid() const
319 {
320 return id == OH_VALUES_ID;
321 }