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 RDB_UTILS_H 17 #define RDB_UTILS_H 18 19 #include <list> 20 #include <memory> 21 #include <string> 22 #include <vector> 23 24 #include "result_set.h" 25 #include "abs_predicates.h" 26 #include "datashare_abs_predicates.h" 27 #include "datashare_values_bucket.h" 28 #include "rdb_predicates.h" 29 #include "rdb_result_set_bridge.h" 30 #include "result_set_bridge.h" 31 #include "value_object.h" 32 #include "values_bucket.h" 33 #include "cache_result_set.h" 34 35 namespace OHOS { 36 namespace RdbDataShareAdapter { 37 /** 38 * The RdbUtils class of RDB. 39 */ 40 class API_EXPORT RdbUtils { 41 public: 42 /** 43 * @brief Use RdbPredicates replace NativeRdb::RdbPredicates namespace. 44 */ 45 using RdbPredicates = NativeRdb::RdbPredicates; 46 47 /** 48 * @brief Use ResultSet replace NativeRdb::ResultSet namespace. 49 */ 50 using ResultSet = NativeRdb::ResultSet; 51 52 /** 53 * @brief Use ValuesBucket replace NativeRdb::ValuesBucket namespace. 54 */ 55 using ValuesBucket = NativeRdb::ValuesBucket; 56 57 /** 58 * @brief Use DataShareValuesBucket replace DataShare::DataShareValuesBucket namespace. 59 */ 60 using DataShareValuesBucket = DataShare::DataShareValuesBucket; 61 62 /** 63 * @brief Use DataShareAbsPredicates replace DataShare::DataShareAbsPredicates namespace. 64 */ 65 using DataShareAbsPredicates = DataShare::DataShareAbsPredicates; 66 67 /** 68 * @brief Use ResultSetBridge replace DataShare::ResultSetBridge namespace. 69 */ 70 using ResultSetBridge = DataShare::ResultSetBridge; 71 72 /** 73 * @brief Use OperationItem replace DataShare::OperationItem namespace. 74 */ 75 using OperationItem = DataShare::OperationItem; 76 77 /** 78 * @brief Use DataSharePredicatesObject replace DataShare::SingleValue namespace. 79 */ 80 using DataSharePredicatesObject = DataShare::SingleValue; 81 82 /** 83 * @brief Convert DataShare::DataShareValuesBucket to NativeRdb::ValuesBucket. 84 */ 85 API_EXPORT static ValuesBucket ToValuesBucket(DataShareValuesBucket bucket); 86 87 /** 88 * @brief Convert DataShare::DataShareAbsPredicates to NativeRdb::RdbPredicates. 89 * 90 * @param table Indicates the table name. 91 */ 92 API_EXPORT static RdbPredicates ToPredicates( 93 const DataShareAbsPredicates &predicates, const std::string &table); 94 95 /** 96 * @brief Convert NativeRdb::ResultSet to DataShare::ResultSetBridge. 97 */ 98 API_EXPORT static std::shared_ptr<ResultSetBridge> ToResultSetBridge(std::shared_ptr<ResultSet> resultSet); 99 100 private: 101 static void NoSupport(const OperationItem &item, RdbPredicates &query); 102 static void EqualTo(const OperationItem &item, RdbPredicates &predicates); 103 static void NotEqualTo(const OperationItem &item, RdbPredicates &predicates); 104 static void GreaterThan(const OperationItem &item, RdbPredicates &predicates); 105 static void LessThan(const OperationItem &item, RdbPredicates &predicates); 106 static void GreaterThanOrEqualTo(const OperationItem &item, RdbPredicates &predicates); 107 static void LessThanOrEqualTo(const OperationItem &item, RdbPredicates &predicates); 108 static void And(const OperationItem &item, RdbPredicates &predicates); 109 static void Or(const OperationItem &item, RdbPredicates &predicates); 110 static void IsNull(const OperationItem &item, RdbPredicates &predicates); 111 static void IsNotNull(const OperationItem &item, RdbPredicates &predicates); 112 static void In(const OperationItem &item, RdbPredicates &predicates); 113 static void NotIn(const OperationItem &item, RdbPredicates &predicates); 114 static void Like(const OperationItem &item, RdbPredicates &predicates); 115 static void NotLike(const OperationItem &item, RdbPredicates &predicates); 116 static void OrderByAsc(const OperationItem &item, RdbPredicates &predicates); 117 static void OrderByDesc(const OperationItem &item, RdbPredicates &predicates); 118 static void Limit(const OperationItem &item, RdbPredicates &predicates); 119 static void Offset(const OperationItem &item, RdbPredicates &predicates); 120 static void BeginWrap(const OperationItem &item, RdbPredicates &predicates); 121 static void EndWrap(const OperationItem &item, RdbPredicates &predicates); 122 static void BeginsWith(const OperationItem &item, RdbPredicates &predicates); 123 static void EndsWith(const OperationItem &item, RdbPredicates &predicates); 124 static void Distinct(const OperationItem &item, RdbPredicates &predicates); 125 static void GroupBy(const OperationItem &item, RdbPredicates &predicates); 126 static void IndexedBy(const OperationItem &item, RdbPredicates &predicates); 127 static void Contains(const OperationItem &item, RdbPredicates &predicates); 128 static void NotContains(const OperationItem &item, RdbPredicates &predicates); 129 static void Glob(const OperationItem &item, RdbPredicates &predicates); 130 static void Between(const OperationItem &item, RdbPredicates &predicates); 131 static void NotBetween(const OperationItem &item, RdbPredicates &predicates); 132 static void CrossJoin(const OperationItem &item, RdbPredicates &predicates); 133 static void InnerJoin(const OperationItem &item, RdbPredicates &predicates); 134 static void LeftOuterJoin(const OperationItem &item, RdbPredicates &predicates); 135 static void Using(const OperationItem &item, RdbPredicates &predicates); 136 static void On(const OperationItem &item, RdbPredicates &predicates); 137 RdbUtils(); 138 ~RdbUtils(); 139 static OHOS::NativeRdb::ValueObject ToValueObject(const DataSharePredicatesObject &predicatesObject); 140 using OperateHandler = void (*)(const OperationItem &, RdbPredicates &); 141 RDB_UTILS_PUSH_WARNING 142 RDB_UTILS_DISABLE_WARNING("-Wc99-designator") 143 static constexpr OperateHandler HANDLERS[DataShare::LAST_TYPE] = { 144 [DataShare::INVALID_OPERATION] = &RdbUtils::NoSupport, 145 [DataShare::EQUAL_TO] = &RdbUtils::EqualTo, 146 [DataShare::NOT_EQUAL_TO] = &RdbUtils::NotEqualTo, 147 [DataShare::GREATER_THAN] = &RdbUtils::GreaterThan, 148 [DataShare::LESS_THAN] = &RdbUtils::LessThan, 149 [DataShare::GREATER_THAN_OR_EQUAL_TO] = &RdbUtils::GreaterThanOrEqualTo, 150 [DataShare::LESS_THAN_OR_EQUAL_TO] = &RdbUtils::LessThanOrEqualTo, 151 [DataShare::AND] = &RdbUtils::And, 152 [DataShare::OR] = &RdbUtils::Or, 153 [DataShare::IS_NULL] = &RdbUtils::IsNull, 154 [DataShare::IS_NOT_NULL] = &RdbUtils::IsNotNull, 155 [DataShare::SQL_IN] = &RdbUtils::In, 156 [DataShare::NOT_IN] = &RdbUtils::NotIn, 157 [DataShare::LIKE] = &RdbUtils::Like, 158 [DataShare::UNLIKE] = &RdbUtils::NoSupport, 159 [DataShare::ORDER_BY_ASC] = &RdbUtils::OrderByAsc, 160 [DataShare::ORDER_BY_DESC] = &RdbUtils::OrderByDesc, 161 [DataShare::LIMIT] = &RdbUtils::Limit, 162 [DataShare::OFFSET] = &RdbUtils::Offset, 163 [DataShare::BEGIN_WARP] = &RdbUtils::BeginWrap, 164 [DataShare::END_WARP] = &RdbUtils::EndWrap, 165 [DataShare::BEGIN_WITH] = &RdbUtils::BeginsWith, 166 [DataShare::END_WITH] = &RdbUtils::EndsWith, 167 [DataShare::IN_KEY] = &RdbUtils::NoSupport, 168 [DataShare::DISTINCT] = &RdbUtils::Distinct, 169 [DataShare::GROUP_BY] = &RdbUtils::GroupBy, 170 [DataShare::INDEXED_BY] = &RdbUtils::IndexedBy, 171 [DataShare::CONTAINS] = &RdbUtils::Contains, 172 [DataShare::GLOB] = &RdbUtils::Glob, 173 [DataShare::BETWEEN] = &RdbUtils::Between, 174 [DataShare::NOTBETWEEN] = &RdbUtils::NotBetween, 175 [DataShare::KEY_PREFIX] = &RdbUtils::NoSupport, 176 [DataShare::CROSSJOIN] = &RdbUtils::CrossJoin, 177 [DataShare::INNERJOIN] = &RdbUtils::InnerJoin, 178 [DataShare::LEFTOUTERJOIN] = &RdbUtils::LeftOuterJoin, 179 [DataShare::USING] = &RdbUtils::Using, 180 [DataShare::ON] = &RdbUtils::On, 181 }; 182 RDB_UTILS_POP_WARNING 183 }; 184 } // namespace RdbDataShareAdapter 185 } // namespace OHOS 186 #endif // RDB_UTILS_H 187