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 #ifndef DATASHARE_PREDICATES_H 17 #define DATASHARE_PREDICATES_H 18 19 #include <string> 20 21 #include "datashare_abs_predicates.h" 22 #include "datashare_errno.h" 23 #include "datashare_predicates_object.h" 24 #include "datashare_predicates_objects.h" 25 26 namespace OHOS { 27 namespace DataShare { 28 class DataSharePredicates : public DataShareAbsPredicates { 29 public: DataSharePredicates()30 DataSharePredicates() 31 { 32 } DataSharePredicates(const std::list<OperationItem> & operList)33 explicit DataSharePredicates(const std::list<OperationItem> &operList) : operationList_(operList) 34 { 35 } ~DataSharePredicates()36 ~DataSharePredicates() 37 { 38 } EqualTo(const std::string & field,const DataSharePredicatesObject & value)39 DataSharePredicates *EqualTo(const std::string &field, const DataSharePredicatesObject &value) 40 { 41 SetOperationList(EQUAL_TO, field, value); 42 return this; 43 } NotEqualTo(const std::string & field,const DataSharePredicatesObject & value)44 DataSharePredicates *NotEqualTo(const std::string &field, const DataSharePredicatesObject &value) 45 { 46 SetOperationList(NOT_EQUAL_TO, field, value); 47 return this; 48 } GreaterThan(const std::string & field,const DataSharePredicatesObject & value)49 DataSharePredicates *GreaterThan(const std::string &field, const DataSharePredicatesObject &value) 50 { 51 SetOperationList(GREATER_THAN, field, value); 52 return this; 53 } LessThan(const std::string & field,const DataSharePredicatesObject & value)54 DataSharePredicates *LessThan(const std::string &field, const DataSharePredicatesObject &value) 55 { 56 SetOperationList(LESS_THAN, field, value); 57 return this; 58 } GreaterThanOrEqualTo(const std::string & field,const DataSharePredicatesObject & value)59 DataSharePredicates *GreaterThanOrEqualTo(const std::string &field, const DataSharePredicatesObject &value) 60 { 61 SetOperationList(GREATER_THAN_OR_EQUAL_TO, field, value); 62 return this; 63 } LessThanOrEqualTo(const std::string & field,const DataSharePredicatesObject & value)64 DataSharePredicates *LessThanOrEqualTo(const std::string &field, const DataSharePredicatesObject &value) 65 { 66 SetOperationList(LESS_THAN_OR_EQUAL_TO, field, value); 67 return this; 68 } In(const std::string & field,const DataSharePredicatesObjects & values)69 DataSharePredicates *In(const std::string &field, const DataSharePredicatesObjects &values) 70 { 71 SetOperationList(SQL_IN, field, values); 72 return this; 73 } NotIn(const std::string & field,const DataSharePredicatesObjects & values)74 DataSharePredicates *NotIn(const std::string &field, const DataSharePredicatesObjects &values) 75 { 76 SetOperationList(NOT_IN, field, values); 77 return this; 78 } BeginWrap()79 DataSharePredicates *BeginWrap() 80 { 81 SetOperationList(BEGIN_WARP); 82 return this; 83 } EndWrap()84 DataSharePredicates *EndWrap() 85 { 86 SetOperationList(END_WARP); 87 return this; 88 } Or()89 DataSharePredicates *Or() 90 { 91 SetOperationList(OR); 92 return this; 93 } And()94 DataSharePredicates *And() 95 { 96 SetOperationList(AND); 97 return this; 98 } Contains(const std::string & field,const std::string & value)99 DataSharePredicates *Contains(const std::string &field, const std::string &value) 100 { 101 SetOperationList(CONTAINS, field, value); 102 return this; 103 } BeginsWith(const std::string & field,const std::string & value)104 DataSharePredicates *BeginsWith(const std::string &field, const std::string &value) 105 { 106 SetOperationList(BEGIN_WITH, field, value); 107 return this; 108 } EndsWith(const std::string & field,const std::string & value)109 DataSharePredicates *EndsWith(const std::string &field, const std::string &value) 110 { 111 SetOperationList(END_WITH, field, value); 112 return this; 113 } IsNull(const std::string & field)114 DataSharePredicates *IsNull(const std::string &field) 115 { 116 SetOperationList(IS_NULL, field); 117 return this; 118 } IsNotNull(const std::string & field)119 DataSharePredicates *IsNotNull(const std::string &field) 120 { 121 SetOperationList(IS_NOT_NULL, field); 122 return this; 123 } Like(const std::string & field,const std::string & value)124 DataSharePredicates *Like(const std::string &field, const std::string &value) 125 { 126 SetOperationList(LIKE, field, value); 127 return this; 128 } Unlike(const std::string & field,const std::string & value)129 DataSharePredicates *Unlike(const std::string &field, const std::string &value) 130 { 131 SetOperationList(UNLIKE, field, value); 132 return this; 133 } Glob(const std::string & field,const std::string & value)134 DataSharePredicates *Glob(const std::string &field, const std::string &value) 135 { 136 SetOperationList(GLOB, field, value); 137 return this; 138 } Between(const std::string & field,const std::string & low,const std::string & high)139 DataSharePredicates *Between(const std::string &field, const std::string &low, const std::string &high) 140 { 141 SetOperationList(BETWEEN, field, low, high); 142 return this; 143 } NotBetween(const std::string & field,const std::string & low,const std::string & high)144 DataSharePredicates *NotBetween(const std::string &field, const std::string &low, const std::string &high) 145 { 146 SetOperationList(NOTBETWEEN, field, low, high); 147 return this; 148 } OrderByAsc(const std::string & field)149 DataSharePredicates *OrderByAsc(const std::string &field) 150 { 151 SetOperationList(ORDER_BY_ASC, field); 152 return this; 153 } OrderByDesc(const std::string & field)154 DataSharePredicates *OrderByDesc(const std::string &field) 155 { 156 SetOperationList(ORDER_BY_DESC, field); 157 return this; 158 } Distinct()159 DataSharePredicates *Distinct() 160 { 161 SetOperationList(DISTINCT); 162 return this; 163 } Limit(const int number,const int offset)164 DataSharePredicates *Limit(const int number, const int offset) 165 { 166 SetOperationList(LIMIT, number, offset); 167 return this; 168 } GroupBy(const std::vector<std::string> & fields)169 DataSharePredicates *GroupBy(const std::vector<std::string> &fields) 170 { 171 SetOperationList(GROUP_BY, fields); 172 return this; 173 } IndexedBy(const std::string & indexName)174 DataSharePredicates *IndexedBy(const std::string &indexName) 175 { 176 SetOperationList(INDEXED_BY, indexName); 177 return this; 178 } KeyPrefix(const std::string & prefix)179 DataSharePredicates *KeyPrefix(const std::string &prefix) 180 { 181 SetOperationList(KEY_PREFIX, prefix); 182 return this; 183 } InKeys(const std::vector<std::string> & keys)184 DataSharePredicates *InKeys(const std::vector<std::string> &keys) 185 { 186 SetOperationList(IN_KEY, keys); 187 return this; 188 } GetOperationList()189 const std::list<OperationItem> &GetOperationList() const 190 { 191 return operationList_; 192 } GetWhereClause()193 std::string GetWhereClause() const 194 { 195 return whereClause_; 196 } SetWhereClause(const std::string & whereClause)197 int SetWhereClause(const std::string &whereClause) 198 { 199 if ((settingMode_ != PREDICATES_METHOD) && (!whereClause.empty())) { 200 this->whereClause_ = whereClause; 201 settingMode_ = QUERY_LANGUAGE; 202 return E_OK; 203 } 204 return E_ERROR; 205 } GetWhereArgs()206 std::vector<std::string> GetWhereArgs() const 207 { 208 return whereArgs_; 209 } SetWhereArgs(const std::vector<std::string> & whereArgs)210 int SetWhereArgs(const std::vector<std::string> &whereArgs) 211 { 212 if ((settingMode_ != PREDICATES_METHOD) && (!whereArgs.empty())) { 213 if (!whereArgs.empty()) { 214 this->whereArgs_ = whereArgs; 215 settingMode_ = QUERY_LANGUAGE; 216 return E_OK; 217 } 218 } 219 return E_ERROR; 220 } GetOrder()221 std::string GetOrder() const 222 { 223 return order_; 224 } SetOrder(const std::string & order)225 int SetOrder(const std::string &order) 226 { 227 if ((settingMode_ != PREDICATES_METHOD) && (!order.empty())) { 228 this->order_ = order; 229 settingMode_ = QUERY_LANGUAGE; 230 return E_OK; 231 } 232 return E_ERROR; 233 } GetSettingMode()234 SettingMode GetSettingMode() const 235 { 236 return settingMode_; 237 } SetSettingMode(const SettingMode & settingMode)238 void SetSettingMode(const SettingMode &settingMode) 239 { 240 settingMode_ = settingMode; 241 } 242 243 private: SetOperationList(OperationType operationType,const DataSharePredicatesObjects & param)244 void SetOperationList(OperationType operationType, const DataSharePredicatesObjects ¶m) 245 { 246 OperationItem operationItem {}; 247 operationItem.operation = operationType; 248 operationItem.multiParams.push_back(param); 249 operationList_.push_back(operationItem); 250 if (settingMode_ != PREDICATES_METHOD) { 251 ClearQueryLanguage(); 252 settingMode_ = PREDICATES_METHOD; 253 } 254 } SetOperationList(OperationType operationType,const DataSharePredicatesObject & param1,const DataSharePredicatesObjects & param2)255 void SetOperationList( 256 OperationType operationType, const DataSharePredicatesObject ¶m1, const DataSharePredicatesObjects ¶m2) 257 { 258 OperationItem operationItem {}; 259 operationItem.operation = operationType; 260 operationItem.singleParams.push_back(param1); 261 operationItem.multiParams.push_back(param2); 262 operationList_.push_back(operationItem); 263 if (settingMode_ != PREDICATES_METHOD) { 264 ClearQueryLanguage(); 265 settingMode_ = PREDICATES_METHOD; 266 } 267 } 268 void SetOperationList(OperationType operationType, const DataSharePredicatesObject ¶1 = {}, 269 const DataSharePredicatesObject ¶2 = {}, const DataSharePredicatesObject ¶3 = {}) 270 { 271 OperationItem operationItem {}; 272 operationItem.operation = operationType; 273 operationItem.singleParams.push_back(para1); 274 operationItem.singleParams.push_back(para2); 275 operationItem.singleParams.push_back(para3); 276 operationList_.push_back(operationItem); 277 if (settingMode_ != PREDICATES_METHOD) { 278 ClearQueryLanguage(); 279 settingMode_ = PREDICATES_METHOD; 280 } 281 } ClearQueryLanguage()282 void ClearQueryLanguage() 283 { 284 whereClause_ = ""; 285 whereArgs_ = {}; 286 order_ = ""; 287 } 288 std::list<OperationItem> operationList_; 289 std::string whereClause_; 290 std::vector<std::string> whereArgs_; 291 std::string order_; 292 SettingMode settingMode_ = {}; 293 }; 294 } // namespace DataShare 295 } // namespace OHOS 296 #endif