153c3577eSopenharmony_ci/* 253c3577eSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 353c3577eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 453c3577eSopenharmony_ci * you may not use this file except in compliance with the License. 553c3577eSopenharmony_ci * You may obtain a copy of the License at 653c3577eSopenharmony_ci * 753c3577eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 853c3577eSopenharmony_ci * 953c3577eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1053c3577eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1153c3577eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1253c3577eSopenharmony_ci * See the License for the specific language governing permissions and 1353c3577eSopenharmony_ci * limitations under the License. 1453c3577eSopenharmony_ci */ 1553c3577eSopenharmony_ci 1653c3577eSopenharmony_ci#ifndef OHOS_DISTRIBUTED_DATA_DATAMGR_SERVICE_RDB_QUERY_H 1753c3577eSopenharmony_ci#define OHOS_DISTRIBUTED_DATA_DATAMGR_SERVICE_RDB_QUERY_H 1853c3577eSopenharmony_ci#include "query.h" 1953c3577eSopenharmony_ci#include "rdb_predicates.h" 2053c3577eSopenharmony_ci#include "store/general_value.h" 2153c3577eSopenharmony_ci#include "store_types.h" 2253c3577eSopenharmony_cinamespace OHOS::DistributedRdb { 2353c3577eSopenharmony_ciclass RdbQuery : public DistributedData::GenQuery { 2453c3577eSopenharmony_cipublic: 2553c3577eSopenharmony_ci using Predicates = NativeRdb::RdbPredicates; 2653c3577eSopenharmony_ci static constexpr uint64_t TYPE_ID = 0x20000001; 2753c3577eSopenharmony_ci RdbQuery() = default; 2853c3577eSopenharmony_ci ~RdbQuery() override = default; 2953c3577eSopenharmony_ci bool IsEqual(uint64_t tid) override; 3053c3577eSopenharmony_ci std::vector<std::string> GetTables() override; 3153c3577eSopenharmony_ci void SetQueryNodes(const std::string& tableName, DistributedData::QueryNodes&& nodes) override; 3253c3577eSopenharmony_ci DistributedData::QueryNodes GetQueryNodes(const std::string& tableName) override; 3353c3577eSopenharmony_ci std::vector<std::string> GetDevices() const; 3453c3577eSopenharmony_ci std::string GetStatement() const; 3553c3577eSopenharmony_ci DistributedData::Values GetBindArgs() const; 3653c3577eSopenharmony_ci void SetColumns(std::vector<std::string> &&columns); 3753c3577eSopenharmony_ci void SetColumns(const std::vector<std::string> &columns); 3853c3577eSopenharmony_ci std::vector<std::string> GetColumns() const; 3953c3577eSopenharmony_ci DistributedDB::Query GetQuery() const; 4053c3577eSopenharmony_ci DistributedDB::RemoteCondition GetRemoteCondition() const; 4153c3577eSopenharmony_ci bool IsRemoteQuery(); 4253c3577eSopenharmony_ci bool IsPriority(); 4353c3577eSopenharmony_ci void MakeQuery(const PredicatesMemo &predicates); 4453c3577eSopenharmony_ci void MakeRemoteQuery(const std::string &devices, const std::string &sql, DistributedData::Values &&args); 4553c3577eSopenharmony_ci void MakeCloudQuery(const PredicatesMemo &predicates); 4653c3577eSopenharmony_ci 4753c3577eSopenharmony_ciprivate: 4853c3577eSopenharmony_ci void EqualTo(const RdbPredicateOperation& operation); 4953c3577eSopenharmony_ci void NotEqualTo(const RdbPredicateOperation& operation); 5053c3577eSopenharmony_ci void And(const RdbPredicateOperation& operation); 5153c3577eSopenharmony_ci void Or(const RdbPredicateOperation& operation); 5253c3577eSopenharmony_ci void OrderBy(const RdbPredicateOperation& operation); 5353c3577eSopenharmony_ci void Limit(const RdbPredicateOperation& operation); 5453c3577eSopenharmony_ci void In(const RdbPredicateOperation& operation); 5553c3577eSopenharmony_ci void NotIn(const RdbPredicateOperation& operation); 5653c3577eSopenharmony_ci void Contain(const RdbPredicateOperation& operation); 5753c3577eSopenharmony_ci void BeginWith(const RdbPredicateOperation& operation); 5853c3577eSopenharmony_ci void EndWith(const RdbPredicateOperation& operation); 5953c3577eSopenharmony_ci void IsNull(const RdbPredicateOperation& operation); 6053c3577eSopenharmony_ci void IsNotNull(const RdbPredicateOperation& operation); 6153c3577eSopenharmony_ci void Like(const RdbPredicateOperation& operation); 6253c3577eSopenharmony_ci void Glob(const RdbPredicateOperation& operation); 6353c3577eSopenharmony_ci void Between(const RdbPredicateOperation& operation); 6453c3577eSopenharmony_ci void NotBetween(const RdbPredicateOperation& operation); 6553c3577eSopenharmony_ci void GreaterThan(const RdbPredicateOperation& operation); 6653c3577eSopenharmony_ci void GreaterThanOrEqual(const RdbPredicateOperation& operation); 6753c3577eSopenharmony_ci void LessThan(const RdbPredicateOperation& operation); 6853c3577eSopenharmony_ci void LessThanOrEqual(const RdbPredicateOperation& operation); 6953c3577eSopenharmony_ci void Distinct(const RdbPredicateOperation& operation); 7053c3577eSopenharmony_ci void IndexedBy(const RdbPredicateOperation& operation); 7153c3577eSopenharmony_ci void BeginGroup(const RdbPredicateOperation& operation); 7253c3577eSopenharmony_ci void EndGroup(const RdbPredicateOperation& operation); 7353c3577eSopenharmony_ci using PredicateHandle = void (RdbQuery::*)(const RdbPredicateOperation &operation); 7453c3577eSopenharmony_ci static constexpr inline PredicateHandle HANDLES[OPERATOR_MAX] = { 7553c3577eSopenharmony_ci &RdbQuery::EqualTo, 7653c3577eSopenharmony_ci &RdbQuery::NotEqualTo, 7753c3577eSopenharmony_ci &RdbQuery::And, 7853c3577eSopenharmony_ci &RdbQuery::Or, 7953c3577eSopenharmony_ci &RdbQuery::OrderBy, 8053c3577eSopenharmony_ci &RdbQuery::Limit, 8153c3577eSopenharmony_ci &RdbQuery::BeginGroup, 8253c3577eSopenharmony_ci &RdbQuery::EndGroup, 8353c3577eSopenharmony_ci &RdbQuery::In, 8453c3577eSopenharmony_ci &RdbQuery::NotIn, 8553c3577eSopenharmony_ci &RdbQuery::Contain, 8653c3577eSopenharmony_ci &RdbQuery::BeginWith, 8753c3577eSopenharmony_ci &RdbQuery::EndWith, 8853c3577eSopenharmony_ci &RdbQuery::IsNull, 8953c3577eSopenharmony_ci &RdbQuery::IsNotNull, 9053c3577eSopenharmony_ci &RdbQuery::Like, 9153c3577eSopenharmony_ci &RdbQuery::Glob, 9253c3577eSopenharmony_ci &RdbQuery::Between, 9353c3577eSopenharmony_ci &RdbQuery::NotBetween, 9453c3577eSopenharmony_ci &RdbQuery::GreaterThan, 9553c3577eSopenharmony_ci &RdbQuery::GreaterThanOrEqual, 9653c3577eSopenharmony_ci &RdbQuery::LessThan, 9753c3577eSopenharmony_ci &RdbQuery::LessThanOrEqual, 9853c3577eSopenharmony_ci &RdbQuery::Distinct, 9953c3577eSopenharmony_ci &RdbQuery::IndexedBy 10053c3577eSopenharmony_ci }; 10153c3577eSopenharmony_ci static constexpr inline uint32_t DECIMAL_BASE = 10; 10253c3577eSopenharmony_ci 10353c3577eSopenharmony_ci DistributedDB::Query query_; 10453c3577eSopenharmony_ci std::shared_ptr<Predicates> predicates_; 10553c3577eSopenharmony_ci std::vector<std::string> columns_; 10653c3577eSopenharmony_ci bool isRemote_ = false; 10753c3577eSopenharmony_ci bool isPriority_ = false; 10853c3577eSopenharmony_ci std::string sql_; 10953c3577eSopenharmony_ci DistributedData::Values args_; 11053c3577eSopenharmony_ci std::vector<std::string> devices_; 11153c3577eSopenharmony_ci std::vector<std::string> tables_; 11253c3577eSopenharmony_ci DistributedData::QueryNodes queryNodes_; 11353c3577eSopenharmony_ci}; 11453c3577eSopenharmony_ci} // namespace OHOS::DistributedRdb 11553c3577eSopenharmony_ci#endif // OHOS_DISTRIBUTED_DATA_DATAMGR_SERVICE_RDB_QUERY_H 116