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