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 "../../rdb/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 class RdbUtils { 37 public: 38 using RdbPredicates = NativeRdb::RdbPredicates; 39 using ResultSet = NativeRdb::ResultSet; 40 using ValuesBucket = NativeRdb::ValuesBucket; 41 using DataShareValuesBucket = DataShare::DataShareValuesBucket; 42 using DataShareAbsPredicates = DataShare::DataShareAbsPredicates; 43 using ResultSetBridge = DataShare::ResultSetBridge; 44 using OperationItem = DataShare::OperationItem; 45 using DataSharePredicatesObject = DataShare::DataSharePredicatesObject; 46 47 static ValuesBucket ToValuesBucket(const DataShareValuesBucket &bucket); 48 49 static RdbPredicates ToPredicates(const DataShareAbsPredicates &predicates, const std::string &table); 50 51 static std::shared_ptr<ResultSetBridge> ToResultSetBridge(std::shared_ptr<ResultSet> resultSet); 52 53 private: 54 static void NoSupport(const OperationItem &item, RdbPredicates &query); 55 static void EqualTo(const OperationItem &item, RdbPredicates &predicates); 56 static void NotEqualTo(const OperationItem &item, RdbPredicates &predicates); 57 static void GreaterThan(const OperationItem &item, RdbPredicates &predicates); 58 static void LessThan(const OperationItem &item, RdbPredicates &predicates); 59 static void GreaterThanOrEqualTo(const OperationItem &item, RdbPredicates &predicates); 60 static void LessThanOrEqualTo(const OperationItem &item, RdbPredicates &predicates); 61 static void And(const OperationItem &item, RdbPredicates &predicates); 62 static void Or(const OperationItem &item, RdbPredicates &predicates); 63 static void IsNull(const OperationItem &item, RdbPredicates &predicates); 64 static void IsNotNull(const OperationItem &item, RdbPredicates &predicates); 65 static void In(const OperationItem &item, RdbPredicates &predicates); 66 static void NotIn(const OperationItem &item, RdbPredicates &predicates); 67 static void Like(const OperationItem &item, RdbPredicates &predicates); 68 static void OrderByAsc(const OperationItem &item, RdbPredicates &predicates); 69 static void OrderByDesc(const OperationItem &item, RdbPredicates &predicates); 70 static void Limit(const OperationItem &item, RdbPredicates &predicates); 71 static void Offset(const OperationItem &item, RdbPredicates &predicates); 72 static void BeginWrap(const OperationItem &item, RdbPredicates &predicates); 73 static void EndWrap(const OperationItem &item, RdbPredicates &predicates); 74 static void BeginsWith(const OperationItem &item, RdbPredicates &predicates); 75 static void EndsWith(const OperationItem &item, RdbPredicates &predicates); 76 static void Distinct(const OperationItem &item, RdbPredicates &predicates); 77 static void GroupBy(const OperationItem &item, RdbPredicates &predicates); 78 static void IndexedBy(const OperationItem &item, RdbPredicates &predicates); 79 static void Contains(const OperationItem &item, RdbPredicates &predicates); 80 static void Glob(const OperationItem &item, RdbPredicates &predicates); 81 static void Between(const OperationItem &item, RdbPredicates &predicates); 82 static void NotBetween(const OperationItem &item, RdbPredicates &predicates); 83 RdbUtils(); 84 ~RdbUtils(); 85 static std::string ToString(const DataSharePredicatesObject &predicatesObject); 86 using OperateHandler = void (*)(const OperationItem &, RdbPredicates &); 87 static constexpr OperateHandler HANDLERS[DataShare::LAST_TYPE] = { 88 [DataShare::INVALID_OPERATION] = &RdbUtils::NoSupport, 89 [DataShare::EQUAL_TO] = &RdbUtils::EqualTo, 90 [DataShare::NOT_EQUAL_TO] = &RdbUtils::NotEqualTo, 91 [DataShare::GREATER_THAN] = &RdbUtils::GreaterThan, 92 [DataShare::LESS_THAN] = &RdbUtils::LessThan, 93 [DataShare::GREATER_THAN_OR_EQUAL_TO] = &RdbUtils::GreaterThanOrEqualTo, 94 [DataShare::LESS_THAN_OR_EQUAL_TO] = &RdbUtils::LessThanOrEqualTo, 95 [DataShare::AND] = &RdbUtils::And, 96 [DataShare::OR] = &RdbUtils::Or, 97 [DataShare::IS_NULL] = &RdbUtils::IsNull, 98 [DataShare::IS_NOT_NULL] = &RdbUtils::IsNotNull, 99 [DataShare::SQL_IN] = &RdbUtils::In, 100 [DataShare::NOT_IN] = &RdbUtils::NotIn, 101 [DataShare::LIKE] = &RdbUtils::Like, 102 [DataShare::UNLIKE] = &RdbUtils::NoSupport, 103 [DataShare::ORDER_BY_ASC] = &RdbUtils::OrderByAsc, 104 [DataShare::ORDER_BY_DESC] = &RdbUtils::OrderByDesc, 105 [DataShare::LIMIT] = &RdbUtils::Limit, 106 [DataShare::OFFSET] = &RdbUtils::Offset, 107 [DataShare::BEGIN_WARP] = &RdbUtils::BeginWrap, 108 [DataShare::END_WARP] = &RdbUtils::EndWrap, 109 [DataShare::BEGIN_WITH] = &RdbUtils::BeginsWith, 110 [DataShare::END_WITH] = &RdbUtils::EndsWith, 111 [DataShare::IN_KEY] = &RdbUtils::NoSupport, 112 [DataShare::DISTINCT] = &RdbUtils::Distinct, 113 [DataShare::GROUP_BY] = &RdbUtils::GroupBy, 114 [DataShare::INDEXED_BY] = &RdbUtils::IndexedBy, 115 [DataShare::CONTAINS] = &RdbUtils::Contains, 116 [DataShare::GLOB] = &RdbUtils::Glob, 117 [DataShare::BETWEEN] = &RdbUtils::Between, 118 [DataShare::NOTBETWEEN] = &RdbUtils::NotBetween, 119 [DataShare::KEY_PREFIX] = &RdbUtils::NoSupport, 120 }; 121 }; 122 } // namespace RdbDataShareAdapter 123 } // namespace OHOS 124 #endif // RDB_UTILS_H 125