• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <climits>
20 #include <string>
21 #include <vector>
22 
23 #include "rdb_visibility.h"
24 #include "value_object.h"
25 
26 namespace OHOS {
27 namespace NativeRdb {
28 class API_EXPORT AbsPredicates {
29 public:
30     static constexpr int INIT_LIMIT_VALUE = INT_MIN;
31     static constexpr int INIT_OFFSET_VALUE = INT_MIN;
32     API_EXPORT AbsPredicates();
33     API_EXPORT virtual ~AbsPredicates();
34 
35     enum JoinType {
36         INNER,
37         LEFT,
38         CROSS
39     };
40 
41     API_EXPORT std::string GetStatement() const;
42     API_EXPORT std::string GetWhereClause() const;
43     API_EXPORT void SetWhereClause(const std::string &whereClause);
44     [[deprecated("Use GetBindArgs() instead.")]]
45     API_EXPORT std::vector<std::string> GetWhereArgs() const;
46     API_EXPORT std::vector<ValueObject> GetBindArgs() const;
47     [[deprecated("Use SetBindArgs() instead.")]]
48     API_EXPORT void SetWhereArgs(const std::vector<std::string> &whereArgs);
49     API_EXPORT void SetBindArgs(const std::vector<ValueObject> &bindArgs);
50     API_EXPORT std::string GetOrder() const;
51     API_EXPORT void SetOrder(const std::string &order);
52     API_EXPORT int GetLimit() const;
53     API_EXPORT int GetOffset() const;
54     API_EXPORT bool IsDistinct() const;
55     API_EXPORT std::string GetGroup() const;
56     API_EXPORT std::string GetIndex() const;
57     API_EXPORT bool IsNeedAnd() const;
58     API_EXPORT bool IsSorted() const;
59 
60 public:
61     API_EXPORT virtual void Clear();
62     API_EXPORT virtual AbsPredicates *EqualTo(const std::string &field, const ValueObject &value);
63     API_EXPORT virtual AbsPredicates *NotEqualTo(const std::string &field, const ValueObject &value);
64     API_EXPORT virtual AbsPredicates *BeginWrap();
65     API_EXPORT virtual AbsPredicates *EndWrap();
66     API_EXPORT virtual AbsPredicates *Or();
67     API_EXPORT virtual AbsPredicates *And();
68     API_EXPORT virtual AbsPredicates *Contains(const std::string &field, const std::string &value);
69     API_EXPORT virtual AbsPredicates *BeginsWith(const std::string &field, const std::string &value);
70     API_EXPORT virtual AbsPredicates *EndsWith(const std::string &field, const std::string &value);
71     API_EXPORT virtual AbsPredicates *IsNull(const std::string &field);
72     API_EXPORT virtual AbsPredicates *IsNotNull(const std::string &field);
73     API_EXPORT virtual AbsPredicates *Like(const std::string &field, const std::string &value);
74     API_EXPORT virtual AbsPredicates *Glob(const std::string &field, const std::string &value);
75     API_EXPORT virtual AbsPredicates *Between(
76         const std::string &field, const ValueObject &low, const ValueObject &high);
77     API_EXPORT virtual AbsPredicates *NotBetween(
78         const std::string &field, const ValueObject &low, const ValueObject &high);
79     API_EXPORT virtual AbsPredicates *GreaterThan(const std::string &field, const ValueObject &value);
80     API_EXPORT virtual AbsPredicates *LessThan(const std::string &field, const ValueObject &value);
81     API_EXPORT virtual AbsPredicates *GreaterThanOrEqualTo(const std::string &field, const ValueObject &value);
82     API_EXPORT virtual AbsPredicates *LessThanOrEqualTo(const std::string &field, const ValueObject &value);
83     API_EXPORT virtual AbsPredicates *OrderByAsc(const std::string &field);
84     API_EXPORT virtual AbsPredicates *OrderByDesc(const std::string &field);
85     API_EXPORT virtual AbsPredicates *Distinct();
86     API_EXPORT virtual AbsPredicates *Limit(const int limit);
87     API_EXPORT virtual AbsPredicates *Limit(const int offset, const int limit);
88     API_EXPORT virtual AbsPredicates *Offset(const int offset);
89     API_EXPORT virtual AbsPredicates *GroupBy(const std::vector<std::string> &fields);
90     API_EXPORT virtual AbsPredicates *IndexedBy(const std::string &indexName);
91     [[deprecated("Use In(const std::string &, const std::vector<ValueObject> &) instead.")]]
92     API_EXPORT virtual AbsPredicates *In(const std::string &field, const std::vector<std::string> &values);
93     API_EXPORT virtual AbsPredicates *In(const std::string &field, const std::vector<ValueObject> &values);
94     [[deprecated("Use NotIn(const std::string &, const std::vector<ValueObject> &) instead.")]]
95     API_EXPORT virtual AbsPredicates *NotIn(const std::string &field, const std::vector<std::string> &values);
96     API_EXPORT virtual AbsPredicates *NotIn(const std::string &field, const std::vector<ValueObject> &values);
97 private:
98     std::string whereClause;
99     std::vector<ValueObject> bindArgs;
100     std::string order;
101     std::string group;
102     std::string index;
103     int limit;
104     int offset;
105     bool distinct;
106     bool isNeedAnd;
107     bool isSorted;
108 
109     void Initial();
110     bool CheckParameter(
111         const std::string &methodName, const std::string &field, const std::initializer_list<ValueObject> &args) const;
112     std::string RemoveQuotes(const std::string &source) const;
113     void CheckIsNeedAnd();
114     void AppendWhereClauseWithInOrNotIn(const std::string &methodName, const std::string &field,
115         const std::vector<std::string> &replaceValues);
116 };
117 } // namespace NativeRdb
118 } // namespace OHOS
119 
120 #endif