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 KV_UTILS_H 17 #define KV_UTILS_H 18 19 #include "types.h" 20 #include "datashare_abs_predicates.h" 21 #include "data_query.h" 22 #include "datashare_values_bucket.h" 23 #include "kvstore_result_set.h" 24 #include "result_set_bridge.h" 25 #include "visibility.h" 26 27 namespace OHOS { 28 namespace DistributedKv { 29 class KvUtils { 30 public: 31 enum { 32 STRING = 0, 33 INTEGER = 1, 34 FLOAT = 2, 35 BYTE_ARRAY = 3, 36 BOOLEAN = 4, 37 DOUBLE = 5, 38 INVALID = 255 39 }; 40 API_EXPORT static std::shared_ptr<DataShare::ResultSetBridge> ToResultSetBridge( 41 std::shared_ptr<KvStoreResultSet> resultSet); 42 API_EXPORT static Status ToQuery(const DataShare::DataShareAbsPredicates &predicates, DataQuery &query); 43 API_EXPORT static Entry ToEntry(const DataShare::DataShareValuesBucket &valueBucket); 44 API_EXPORT static std::vector<Entry> ToEntries(const std::vector<DataShare::DataShareValuesBucket> &valueBuckets); 45 API_EXPORT static Status GetKeys(const DataShare::DataShareAbsPredicates &predicates, std::vector<Key> &keys); 46 private: 47 static void NoSupport(const DataShare::OperationItem &oper, DataQuery &query); 48 static void EqualTo(const DataShare::OperationItem &oper, DataQuery &query); 49 static void NotEqualTo(const DataShare::OperationItem &oper, DataQuery &query); 50 static void GreaterThan(const DataShare::OperationItem &oper, DataQuery &query); 51 static void LessThan(const DataShare::OperationItem &oper, DataQuery &query); 52 static void GreaterThanOrEqualTo(const DataShare::OperationItem &oper, DataQuery &query); 53 static void LessThanOrEqualTo(const DataShare::OperationItem &oper, DataQuery &query); 54 static void And(const DataShare::OperationItem &oper, DataQuery &query); 55 static void Or(const DataShare::OperationItem &oper, DataQuery &query); 56 static void IsNull(const DataShare::OperationItem &oper, DataQuery &query); 57 static void IsNotNull(const DataShare::OperationItem &oper, DataQuery &query); 58 static void In(const DataShare::OperationItem &oper, DataQuery &query); 59 static void NotIn(const DataShare::OperationItem &oper, DataQuery &query); 60 static void Like(const DataShare::OperationItem &oper, DataQuery &query); 61 static void Unlike(const DataShare::OperationItem &oper, DataQuery &query); 62 static void OrderByAsc(const DataShare::OperationItem &oper, DataQuery &query); 63 static void OrderByDesc(const DataShare::OperationItem &oper, DataQuery &query); 64 static void Limit(const DataShare::OperationItem &oper, DataQuery &query); 65 static void InKeys(const DataShare::OperationItem &oper, DataQuery &query); 66 static void KeyPrefix(const DataShare::OperationItem &oper, DataQuery &query); 67 68 KvUtils(KvUtils &&) = delete; 69 KvUtils(const KvUtils &) = delete; 70 KvUtils &operator=(KvUtils &&) = delete; 71 KvUtils &operator=(const KvUtils &) = delete; 72 ~KvUtils() = delete; 73 static Status ToEntryKey(const std::map<std::string, DataShare::DataShareValueObject::Type> &values, Blob &blob); 74 static Status ToEntryValue(const std::map<std::string, DataShare::DataShareValueObject::Type> &values, Blob &blob); 75 static const std::string KEY; 76 static const std::string VALUE; 77 using QueryHandler = void (*)(const DataShare::OperationItem &, DataQuery &); 78 static constexpr QueryHandler HANDLERS[DataShare::LAST_TYPE] = { 79 [DataShare::INVALID_OPERATION] = &KvUtils::NoSupport, 80 [DataShare::EQUAL_TO] = &KvUtils::EqualTo, 81 [DataShare::NOT_EQUAL_TO] = &KvUtils::NotEqualTo, 82 [DataShare::GREATER_THAN] = &KvUtils::GreaterThan, 83 [DataShare::LESS_THAN] = &KvUtils::LessThan, 84 [DataShare::GREATER_THAN_OR_EQUAL_TO] = &KvUtils::GreaterThanOrEqualTo, 85 [DataShare::LESS_THAN_OR_EQUAL_TO] = &KvUtils::LessThanOrEqualTo, 86 [DataShare::AND] = &KvUtils::And, 87 [DataShare::OR] = &KvUtils::Or, 88 [DataShare::IS_NULL] = &KvUtils::IsNull, 89 [DataShare::IS_NOT_NULL] = &KvUtils::IsNotNull, 90 [DataShare::SQL_IN] = &KvUtils::In, 91 [DataShare::NOT_IN] = &KvUtils::NotIn, 92 [DataShare::LIKE] = &KvUtils::Like, 93 [DataShare::UNLIKE] = &KvUtils::Unlike, 94 [DataShare::ORDER_BY_ASC] = &KvUtils::OrderByAsc, 95 [DataShare::ORDER_BY_DESC] = &KvUtils::OrderByDesc, 96 [DataShare::LIMIT] = &KvUtils::Limit, 97 [DataShare::OFFSET] = &KvUtils::NoSupport, 98 [DataShare::BEGIN_WARP] = &KvUtils::NoSupport, 99 [DataShare::END_WARP] = &KvUtils::NoSupport, 100 [DataShare::BEGIN_WITH] = &KvUtils::NoSupport, 101 [DataShare::END_WITH] = &KvUtils::NoSupport, 102 [DataShare::IN_KEY] = &KvUtils::InKeys, 103 [DataShare::DISTINCT] = &KvUtils::NoSupport, 104 [DataShare::GROUP_BY] = &KvUtils::NoSupport, 105 [DataShare::INDEXED_BY] = &KvUtils::NoSupport, 106 [DataShare::CONTAINS] = &KvUtils::NoSupport, 107 [DataShare::GLOB] = &KvUtils::NoSupport, 108 [DataShare::BETWEEN] = &KvUtils::NoSupport, 109 [DataShare::NOTBETWEEN] = &KvUtils::NoSupport, 110 [DataShare::KEY_PREFIX] = &KvUtils::KeyPrefix, 111 }; 112 }; 113 } // namespace DistributedKv 114 } // namespace OHOS 115 #endif // KV_UTILS_H