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