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 16 #include "relational_store_impl_rdbpredicatesproxy.h" 17 #include "relational_store_utils.h" 18 19 namespace OHOS { 20 namespace Relational { RdbPredicatesImpl(const char * tableName)21 RdbPredicatesImpl::RdbPredicatesImpl(const char* tableName) 22 { 23 if (tableName == nullptr) { 24 return; 25 } 26 std::string str = tableName; 27 predicates_ = std::make_shared<NativeRdb::RdbPredicates>(str); 28 } 29 RdbPredicatesImpl(std::shared_ptr<NativeRdb::RdbPredicates> predicates)30 RdbPredicatesImpl::RdbPredicatesImpl(std::shared_ptr<NativeRdb::RdbPredicates> predicates) 31 { 32 predicates_ = predicates; 33 } 34 GetClassType()35 OHOS::FFI::RuntimeType* RdbPredicatesImpl::GetClassType() 36 { 37 static OHOS::FFI::RuntimeType runtimeType = 38 OHOS::FFI::RuntimeType::Create<OHOS::FFI::FFIData>("RdbPredicatesImpl"); 39 return &runtimeType; 40 } 41 GetPredicates()42 std::shared_ptr<NativeRdb::RdbPredicates> RdbPredicatesImpl::GetPredicates() 43 { 44 return predicates_; 45 } 46 InDevices(const char ** devicesArray,int64_t devicesSize)47 void RdbPredicatesImpl::InDevices(const char** devicesArray, int64_t devicesSize) 48 { 49 std::vector<std::string> devices; 50 for (int64_t i = 0; i < devicesSize; i++) { 51 devices.push_back(devicesArray[i]); 52 } 53 if (predicates_ == nullptr) { 54 return; 55 } 56 predicates_->InDevices(devices); 57 } 58 InAllDevices()59 void RdbPredicatesImpl::InAllDevices() 60 { 61 if (predicates_ == nullptr) { 62 return; 63 } 64 predicates_->InAllDevices(); 65 } 66 BeginWrap()67 void RdbPredicatesImpl::BeginWrap() 68 { 69 if (predicates_ == nullptr) { 70 return; 71 } 72 predicates_->BeginWrap(); 73 } 74 EndWrap()75 void RdbPredicatesImpl::EndWrap() 76 { 77 if (predicates_ == nullptr) { 78 return; 79 } 80 predicates_->EndWrap(); 81 } 82 Or()83 void RdbPredicatesImpl::Or() 84 { 85 if (predicates_ == nullptr) { 86 return; 87 } 88 predicates_->Or(); 89 } 90 And()91 void RdbPredicatesImpl::And() 92 { 93 if (predicates_ == nullptr) { 94 return; 95 } 96 predicates_->And(); 97 } 98 Contains(const char * field,const char * value)99 void RdbPredicatesImpl::Contains(const char* field, const char* value) 100 { 101 if (field == nullptr || value == nullptr || predicates_ == nullptr) { 102 return; 103 } 104 std::string cfield = field; 105 std::string cvalue = value; 106 predicates_->Contains(cfield, cvalue); 107 } 108 BeginsWith(const char * field,const char * value)109 void RdbPredicatesImpl::BeginsWith(const char* field, const char* value) 110 { 111 if (field == nullptr || value == nullptr || predicates_ == nullptr) { 112 return; 113 } 114 std::string cfield = field; 115 std::string cvalue = value; 116 predicates_->BeginsWith(cfield, cvalue); 117 } 118 EndsWith(const char * field,const char * value)119 void RdbPredicatesImpl::EndsWith(const char* field, const char* value) 120 { 121 if (field == nullptr || value == nullptr || predicates_ == nullptr) { 122 return; 123 } 124 std::string cfield = field; 125 std::string cvalue = value; 126 predicates_->EndsWith(cfield, cvalue); 127 } 128 IsNull(const char * field)129 void RdbPredicatesImpl::IsNull(const char* field) 130 { 131 if (field == nullptr || predicates_ == nullptr) { 132 return; 133 } 134 std::string cfield = field; 135 predicates_->IsNull(cfield); 136 } 137 IsNotNull(const char * field)138 void RdbPredicatesImpl::IsNotNull(const char* field) 139 { 140 if (field == nullptr || predicates_ == nullptr) { 141 return; 142 } 143 std::string cfield = field; 144 predicates_->IsNotNull(cfield); 145 } 146 Like(const char * field,const char * value)147 void RdbPredicatesImpl::Like(const char* field, const char* value) 148 { 149 if (field == nullptr || value == nullptr || predicates_ == nullptr) { 150 return; 151 } 152 std::string cfield = field; 153 std::string cvalue = value; 154 predicates_->Like(cfield, cvalue); 155 } 156 Glob(const char * field,const char * value)157 void RdbPredicatesImpl::Glob(const char* field, const char* value) 158 { 159 if (field == nullptr || value == nullptr || predicates_ == nullptr) { 160 return; 161 } 162 std::string cfield = field; 163 std::string cvalue = value; 164 predicates_->Glob(cfield, cvalue); 165 } 166 OrderByAsc(const char * field)167 void RdbPredicatesImpl::OrderByAsc(const char* field) 168 { 169 if (field == nullptr || predicates_ == nullptr) { 170 return; 171 } 172 std::string cfield = field; 173 predicates_->OrderByAsc(cfield); 174 } 175 OrderByDesc(const char * field)176 void RdbPredicatesImpl::OrderByDesc(const char* field) 177 { 178 if (field == nullptr || predicates_ == nullptr) { 179 return; 180 } 181 std::string cfield = field; 182 predicates_->OrderByDesc(cfield); 183 } 184 Distinct()185 void RdbPredicatesImpl::Distinct() 186 { 187 if (predicates_ == nullptr) { 188 return; 189 } 190 predicates_->Distinct(); 191 } 192 LimitAs(int32_t value)193 void RdbPredicatesImpl::LimitAs(int32_t value) 194 { 195 if (predicates_ == nullptr) { 196 return; 197 } 198 predicates_->Limit(value); 199 } 200 OffsetAs(int32_t rowOffset)201 void RdbPredicatesImpl::OffsetAs(int32_t rowOffset) 202 { 203 if (predicates_ == nullptr) { 204 return; 205 } 206 predicates_->Offset(rowOffset); 207 } 208 GroupBy(const char ** fieldsArray,int64_t fieldsSize)209 void RdbPredicatesImpl::GroupBy(const char** fieldsArray, int64_t fieldsSize) 210 { 211 if (fieldsArray == nullptr || predicates_ == nullptr) { 212 return; 213 } 214 std::vector<std::string> fields; 215 for (int64_t i = 0; i < fieldsSize; i++) { 216 if (fieldsArray[i] == nullptr) { 217 return; 218 } 219 fields.push_back(fieldsArray[i]); 220 } 221 predicates_->GroupBy(fields); 222 } 223 IndexedBy(const char * field)224 void RdbPredicatesImpl::IndexedBy(const char* field) 225 { 226 if (field == nullptr || predicates_ == nullptr) { 227 return; 228 } 229 std::string cfield = field; 230 predicates_->IndexedBy(cfield); 231 } 232 LessThanOrEqualTo(const char * field,ValueType value)233 void RdbPredicatesImpl::LessThanOrEqualTo(const char* field, ValueType value) 234 { 235 if (field == nullptr || predicates_ == nullptr) { 236 return; 237 } 238 std::string cfield = field; 239 NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value); 240 predicates_->LessThanOrEqualTo(cfield, valueObject); 241 } 242 LessThanOrEqualToEx(const char * field,const ValueTypeEx * value)243 void RdbPredicatesImpl::LessThanOrEqualToEx(const char* field, const ValueTypeEx *value) 244 { 245 if (field == nullptr || value == nullptr || predicates_ == nullptr) { 246 return; 247 } 248 std::string cfield = field; 249 NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value); 250 predicates_->LessThanOrEqualTo(cfield, valueObject); 251 } 252 EqualTo(const char * field,ValueType value)253 void RdbPredicatesImpl::EqualTo(const char* field, ValueType value) 254 { 255 if (field == nullptr || predicates_ == nullptr) { 256 return; 257 } 258 std::string cfield = field; 259 NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value); 260 predicates_->EqualTo(cfield, valueObject); 261 } 262 EqualToEx(const char * field,const ValueTypeEx * value)263 void RdbPredicatesImpl::EqualToEx(const char* field, const ValueTypeEx *value) 264 { 265 if (field == nullptr || predicates_ == nullptr || value == nullptr) { 266 return; 267 } 268 std::string cfield = field; 269 NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value); 270 predicates_->EqualTo(cfield, valueObject); 271 } 272 GreaterThanOrEqualTo(const char * field,ValueType value)273 void RdbPredicatesImpl::GreaterThanOrEqualTo(const char* field, ValueType value) 274 { 275 if (field == nullptr || predicates_ == nullptr) { 276 return; 277 } 278 std::string cfield = field; 279 NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value); 280 predicates_->GreaterThanOrEqualTo(cfield, valueObject); 281 } 282 GreaterThanOrEqualToEx(const char * field,const ValueTypeEx * value)283 void RdbPredicatesImpl::GreaterThanOrEqualToEx(const char* field, const ValueTypeEx *value) 284 { 285 if (field == nullptr || predicates_ == nullptr || value == nullptr) { 286 return; 287 } 288 std::string cfield = field; 289 NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value); 290 predicates_->GreaterThanOrEqualTo(cfield, valueObject); 291 } 292 GreaterThan(const char * field,ValueType value)293 void RdbPredicatesImpl::GreaterThan(const char* field, ValueType value) 294 { 295 if (field == nullptr || predicates_ == nullptr) { 296 return; 297 } 298 std::string cfield = field; 299 NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value); 300 predicates_->GreaterThan(cfield, valueObject); 301 } 302 GreaterThanEx(const char * field,const ValueTypeEx * value)303 void RdbPredicatesImpl::GreaterThanEx(const char* field, const ValueTypeEx *value) 304 { 305 if (field == nullptr || predicates_ == nullptr || value == nullptr) { 306 return; 307 } 308 std::string cfield = field; 309 NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value); 310 predicates_->GreaterThan(cfield, valueObject); 311 } 312 NotBetween(const char * field,ValueType lowValue,ValueType highValue)313 void RdbPredicatesImpl::NotBetween(const char* field, ValueType lowValue, ValueType highValue) 314 { 315 if (field == nullptr || predicates_ == nullptr) { 316 return; 317 } 318 std::string cfield = field; 319 NativeRdb::ValueObject lowValueObject = ValueTypeToValueObject(lowValue); 320 NativeRdb::ValueObject highValueObject = ValueTypeToValueObject(highValue); 321 predicates_->NotBetween(cfield, lowValueObject, highValueObject); 322 } 323 NotBetweenEx(const char * field,const ValueTypeEx * lowValue,const ValueTypeEx * highValue)324 void RdbPredicatesImpl::NotBetweenEx(const char* field, const ValueTypeEx *lowValue, const ValueTypeEx *highValue) 325 { 326 if (field == nullptr || predicates_ == nullptr || lowValue == nullptr || highValue == nullptr) { 327 return; 328 } 329 std::string cfield = field; 330 NativeRdb::ValueObject lowValueObject = ValueTypeExToValueObject(*lowValue); 331 NativeRdb::ValueObject highValueObject = ValueTypeExToValueObject(*highValue); 332 predicates_->NotBetween(cfield, lowValueObject, highValueObject); 333 } 334 Between(const char * field,ValueType lowValue,ValueType highValue)335 void RdbPredicatesImpl::Between(const char* field, ValueType lowValue, ValueType highValue) 336 { 337 if (field == nullptr || predicates_ == nullptr) { 338 return; 339 } 340 std::string cfield = field; 341 NativeRdb::ValueObject lowValueObject = ValueTypeToValueObject(lowValue); 342 NativeRdb::ValueObject highValueObject = ValueTypeToValueObject(highValue); 343 predicates_->Between(cfield, lowValueObject, highValueObject); 344 } 345 BetweenEx(const char * field,const ValueTypeEx * lowValue,const ValueTypeEx * highValue)346 void RdbPredicatesImpl::BetweenEx(const char* field, const ValueTypeEx *lowValue, const ValueTypeEx *highValue) 347 { 348 if (field == nullptr || predicates_ == nullptr || lowValue == nullptr || highValue == nullptr) { 349 return; 350 } 351 std::string cfield = field; 352 NativeRdb::ValueObject lowValueObject = ValueTypeExToValueObject(*lowValue); 353 NativeRdb::ValueObject highValueObject = ValueTypeExToValueObject(*highValue); 354 predicates_->Between(cfield, lowValueObject, highValueObject); 355 } 356 LessThan(const char * field,ValueType value)357 void RdbPredicatesImpl::LessThan(const char* field, ValueType value) 358 { 359 if (field == nullptr || predicates_ == nullptr) { 360 return; 361 } 362 std::string cfield = field; 363 NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value); 364 predicates_->LessThan(cfield, valueObject); 365 } 366 LessThanEx(const char * field,const ValueTypeEx * value)367 void RdbPredicatesImpl::LessThanEx(const char *field, const ValueTypeEx *value) 368 { 369 if (field == nullptr || predicates_ == nullptr || value == nullptr) { 370 return; 371 } 372 std::string cfield = field; 373 NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value); 374 predicates_->LessThan(cfield, valueObject); 375 } 376 In(const char * field,ValueType * values,int64_t valuesSize)377 void RdbPredicatesImpl::In(const char* field, ValueType* values, int64_t valuesSize) 378 { 379 if (field == nullptr || predicates_ == nullptr || values == nullptr) { 380 return; 381 } 382 std::string cfield = field; 383 std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>(); 384 for (int64_t i = 0; i < valuesSize; i++) { 385 valueObjects.push_back(ValueTypeToValueObject(values[i])); 386 } 387 predicates_->In(cfield, valueObjects); 388 } 389 InEx(const char * field,ValueTypeEx * values,int64_t valuesSize)390 void RdbPredicatesImpl::InEx(const char* field, ValueTypeEx* values, int64_t valuesSize) 391 { 392 if (field == nullptr || predicates_ == nullptr || values == nullptr) { 393 return; 394 } 395 std::string cfield = field; 396 std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>(); 397 for (int64_t i = 0; i < valuesSize; i++) { 398 valueObjects.push_back(ValueTypeExToValueObject(values[i])); 399 } 400 predicates_->In(cfield, valueObjects); 401 } 402 NotIn(const char * field,ValueType * values,int64_t valuesSize)403 void RdbPredicatesImpl::NotIn(const char* field, ValueType* values, int64_t valuesSize) 404 { 405 if (field == nullptr || predicates_ == nullptr || values == nullptr) { 406 return; 407 } 408 std::string cfield = field; 409 std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>(); 410 for (int64_t i = 0; i < valuesSize; i++) { 411 valueObjects.push_back(ValueTypeToValueObject(values[i])); 412 } 413 predicates_->NotIn(cfield, valueObjects); 414 } 415 NotInEx(const char * field,ValueTypeEx * values,int64_t valuesSize)416 void RdbPredicatesImpl::NotInEx(const char* field, ValueTypeEx* values, int64_t valuesSize) 417 { 418 if (field == nullptr || predicates_ == nullptr || values == nullptr) { 419 return; 420 } 421 std::string cfield = field; 422 std::vector<NativeRdb::ValueObject> valueObjects = std::vector<NativeRdb::ValueObject>(); 423 for (int64_t i = 0; i < valuesSize; i++) { 424 valueObjects.push_back(ValueTypeExToValueObject(values[i])); 425 } 426 predicates_->NotIn(cfield, valueObjects); 427 } 428 NotEqualTo(const char * field,ValueType value)429 void RdbPredicatesImpl::NotEqualTo(const char* field, ValueType value) 430 { 431 if (field == nullptr || predicates_ == nullptr) { 432 return; 433 } 434 std::string cfield = field; 435 NativeRdb::ValueObject valueObject = ValueTypeToValueObject(value); 436 predicates_->NotEqualTo(cfield, valueObject); 437 } 438 NotEqualToEx(const char * field,const ValueTypeEx * value)439 void RdbPredicatesImpl::NotEqualToEx(const char* field, const ValueTypeEx *value) 440 { 441 if (field == nullptr || predicates_ == nullptr || value == nullptr) { 442 return; 443 } 444 std::string cfield = field; 445 NativeRdb::ValueObject valueObject = ValueTypeExToValueObject(*value); 446 predicates_->NotEqualTo(cfield, valueObject); 447 } 448 NotContains(const char * field,const char * value)449 void RdbPredicatesImpl::NotContains(const char* field, const char* value) 450 { 451 if (field == nullptr || predicates_ == nullptr || value == nullptr) { 452 return; 453 } 454 std::string cfield = field; 455 std::string cvalue = value; 456 predicates_->NotContains(cfield, cvalue); 457 } 458 NotLike(const char * field,const char * value)459 void RdbPredicatesImpl::NotLike(const char* field, const char* value) 460 { 461 if (field == nullptr || predicates_ == nullptr || value == nullptr) { 462 return; 463 } 464 std::string cfield = field; 465 std::string cvalue = value; 466 predicates_->NotLike(field, value); 467 } 468 } 469 }