1 /*
2  * Copyright (c) 2021 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 RELATIONAL_STORE_DELEGATE_H
17 #define RELATIONAL_STORE_DELEGATE_H
18 
19 #include <map>
20 #include <memory>
21 #include "distributeddb/result_set.h"
22 #include "cloud/cloud_store_types.h"
23 #include "cloud/icloud_db.h"
24 #include "cloud/icloud_data_translate.h"
25 #include "cloud/iAssetLoader.h"
26 #include "query.h"
27 #include "store_types.h"
28 #include "store_observer.h"
29 
30 namespace DistributedDB {
31 class RelationalStoreDelegate {
32 public:
33     DB_API virtual ~RelationalStoreDelegate() = default;
34 
35     struct Option {
36         StoreObserver *observer = nullptr;
37         // communicator label use dualTuple hash or not;
38         bool syncDualTupleMode = false;
39         bool isEncryptedDb = false;
40         CipherType cipher = CipherType::DEFAULT;
41         CipherPassword passwd;
42         uint32_t iterateTimes = 0;
43     };
44 
45     DB_API DBStatus CreateDistributedTable(const std::string &tableName, TableSyncType type = DEVICE_COOPERATION)
46     {
47         return CreateDistributedTableInner(tableName, type);
48     }
49 
50     DB_API virtual DBStatus Sync(const std::vector<std::string> &devices, SyncMode mode,
51         const Query &query, const SyncStatusCallback &onComplete, bool wait) = 0;
52 
53     DB_API virtual int32_t GetCloudSyncTaskCount() = 0;
54 
55     DB_API DBStatus RemoveDeviceData(const std::string &device, ClearMode mode = DEFAULT)
56     {
57         return RemoveDeviceDataInner(device, mode);
58     }
59 
60     DB_API virtual DBStatus RemoveDeviceData(const std::string &device, const std::string &tableName) = 0;
61 
62     // timeout is in ms.
63     DB_API virtual DBStatus RemoteQuery(const std::string &device, const RemoteCondition &condition,
64         uint64_t timeout, std::shared_ptr<ResultSet> &result) = 0;
65 
66     // remove all device data
67     DB_API virtual DBStatus RemoveDeviceData() = 0;
68 
69     DB_API virtual DBStatus Sync(const std::vector<std::string> &devices, SyncMode mode,
70          const Query &query, const SyncProcessCallback &onProcess,
71          int64_t waitTime) = 0;
72 
73     DB_API virtual DBStatus SetCloudDB(const std::shared_ptr<ICloudDb> &cloudDb) = 0;
74 
75     DB_API virtual DBStatus SetCloudDbSchema(const DataBaseSchema &schema) = 0;
76 
77     // just support one observer exist at same time
78     DB_API virtual DBStatus RegisterObserver(StoreObserver *observer) = 0;
79 
80     DB_API virtual DBStatus UnRegisterObserver() = 0;
81 
82     DB_API virtual DBStatus UnRegisterObserver(StoreObserver *observer) = 0;
83 
84     DB_API virtual DBStatus SetIAssetLoader(const std::shared_ptr<IAssetLoader> &loader) = 0;
85 
86     DB_API virtual DBStatus Sync(const CloudSyncOption &option, const SyncProcessCallback &onProcess) = 0;
87 
88     DB_API virtual DBStatus SetTrackerTable(const TrackerSchema &schema) = 0;
89 
90     DB_API virtual DBStatus ExecuteSql(const SqlCondition &condition, std::vector<VBucket> &records) = 0;
91 
92     DB_API virtual DBStatus SetReference(const std::vector<TableReferenceProperty> &tableReferenceProperty) = 0;
93 
94     DB_API virtual DBStatus CleanTrackerData(const std::string &tableName, int64_t cursor) = 0;
95 
96     DB_API virtual DBStatus Pragma(PragmaCmd cmd, PragmaData &pragmaData) = 0;
97 
98     DB_API virtual DBStatus UpsertData(const std::string &tableName, const std::vector<VBucket> &records,
99         RecordStatus status = RecordStatus::WAIT_COMPENSATED_SYNC) = 0;
100 
101     // set the config for cloud sync task
102     DB_API virtual DBStatus SetCloudSyncConfig(const CloudSyncConfig &config) = 0;
103 
104     DB_API virtual DBStatus Sync([[gnu::unused]] const CloudSyncOption &option,
105         [[gnu::unused]] const SyncProcessCallback &onProcess,
106         [[gnu::unused]] uint64_t taskId)
107     {
108         return OK;
109     }
110 
111     DB_API virtual SyncProcess GetCloudTaskStatus([[gnu::unused]] uint64_t taskId)
112     {
113         return {};
114     }
115 protected:
116     virtual DBStatus RemoveDeviceDataInner(const std::string &device, ClearMode mode) = 0;
117     virtual DBStatus CreateDistributedTableInner(const std::string &tableName, TableSyncType type) = 0;
118 };
119 } // namespace DistributedDB
120 #endif // RELATIONAL_STORE_DELEGATE_H