1 /* 2 * Copyright (c) 2021 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 NATIVE_RDB_ABSPREDICATES_H 17 #define NATIVE_RDB_ABSPREDICATES_H 18 19 #include <string> 20 #include <vector> 21 22 namespace OHOS { 23 namespace NativeRdb { 24 class AbsPredicates { 25 public: 26 AbsPredicates(); 27 virtual ~AbsPredicates(); 28 29 enum JoinType { 30 INNER, 31 LEFT, 32 CROSS 33 }; 34 35 std::string GetWhereClause() const; 36 void SetWhereClause(std::string whereClause); 37 std::vector<std::string> GetWhereArgs() const; 38 void SetWhereArgs(std::vector<std::string> whereArgs); 39 std::string GetOrder() const; 40 void SetOrder(std::string order); 41 int GetLimit() const; 42 int GetOffset() const; 43 bool IsDistinct() const; 44 std::string GetGroup() const; 45 std::string GetIndex() const; 46 bool IsNeedAnd() const; 47 bool IsSorted() const; 48 49 public: 50 virtual void Clear(); 51 virtual AbsPredicates *EqualTo(std::string field, std::string value); 52 virtual AbsPredicates *NotEqualTo(std::string field, std::string value); 53 virtual AbsPredicates *BeginWrap(); 54 virtual AbsPredicates *EndWrap(); 55 virtual AbsPredicates *Or(); 56 virtual AbsPredicates *And(); 57 virtual AbsPredicates *Contains(std::string field, std::string value); 58 virtual AbsPredicates *BeginsWith(std::string field, std::string value); 59 virtual AbsPredicates *EndsWith(std::string field, std::string value); 60 virtual AbsPredicates *IsNull(std::string field); 61 virtual AbsPredicates *IsNotNull(std::string field); 62 virtual AbsPredicates *Like(std::string field, std::string value); 63 virtual AbsPredicates *Glob(std::string field, std::string value); 64 virtual AbsPredicates *Between(std::string field, std::string low, std::string high); 65 virtual AbsPredicates *NotBetween(std::string field, std::string low, std::string high); 66 virtual AbsPredicates *GreaterThan(std::string field, std::string value); 67 virtual AbsPredicates *LessThan(std::string field, std::string value); 68 virtual AbsPredicates *GreaterThanOrEqualTo(std::string field, std::string value); 69 virtual AbsPredicates *LessThanOrEqualTo(std::string field, std::string value); 70 virtual AbsPredicates *OrderByAsc(std::string field); 71 virtual AbsPredicates *OrderByDesc(std::string field); 72 virtual AbsPredicates *Distinct(); 73 virtual AbsPredicates *Limit(int value); 74 virtual AbsPredicates *Offset(int rowOffset); 75 virtual AbsPredicates *GroupBy(std::vector<std::string> fields); 76 virtual AbsPredicates *IndexedBy(std::string indexName); 77 virtual AbsPredicates *In(std::string field, std::vector<std::string> values); 78 virtual AbsPredicates *NotIn(std::string field, std::vector<std::string> values); 79 80 private: 81 std::string whereClause; 82 std::vector<std::string> whereArgs; 83 std::string order; 84 std::string group; 85 std::string index; 86 int limit; 87 int offset; 88 bool distinct; 89 bool isNeedAnd; 90 bool isSorted; 91 92 void Initial(); 93 bool CheckParameter(std::string methodName, std::string field, std::initializer_list<std::string> args) const; 94 std::string RemoveQuotes(std::string source) const; 95 std::string Normalized(std::string source); 96 void CheckIsNeedAnd(); 97 void AppendWhereClauseWithInOrNotIn(std::string methodName, std::string field, 98 std::vector<std::string> replaceValues); 99 }; 100 } // namespace NativeRdb 101 } // namespace OHOS 102 103 #endif