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