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 #ifndef SQLITE_RELATIONAL_STORE_CONNECTION_H 16 #define SQLITE_RELATIONAL_STORE_CONNECTION_H 17 #ifdef RELATIONAL_STORE 18 19 #include <atomic> 20 #include <string> 21 #include "macro_utils.h" 22 #include "relational_store_connection.h" 23 #include "sqlite_single_ver_relational_storage_executor.h" 24 #include "sqlite_relational_store.h" 25 26 namespace DistributedDB { 27 class SQLiteRelationalStoreConnection : public RelationalStoreConnection { 28 public: 29 explicit SQLiteRelationalStoreConnection(SQLiteRelationalStore *store); 30 31 ~SQLiteRelationalStoreConnection() override = default; 32 33 DISABLE_COPY_ASSIGN_MOVE(SQLiteRelationalStoreConnection); 34 35 // Close and release the connection. 36 int Close() override; 37 int SyncToDevice(SyncInfo &info) override; 38 int32_t GetCloudSyncTaskCount() override; 39 std::string GetIdentifier() override; 40 int CreateDistributedTable(const std::string &tableName, TableSyncType syncType) override; 41 int RegisterLifeCycleCallback(const DatabaseLifeCycleNotifier ¬ifier) override; 42 int DoClean(ClearMode mode) override; 43 int RemoveDeviceData() override; 44 int RemoveDeviceData(const std::string &device) override; 45 int RemoveDeviceData(const std::string &device, const std::string &tableName) override; 46 int RegisterObserverAction(const StoreObserver *observer, const RelationalObserverAction &action) override; 47 int UnRegisterObserverAction(const StoreObserver *observer) override; 48 int RemoteQuery(const std::string &device, const RemoteCondition &condition, uint64_t timeout, 49 std::shared_ptr<ResultSet> &result) override; 50 int SetCloudDB(const std::shared_ptr<ICloudDb> &cloudDb) override; 51 int PrepareAndSetCloudDbSchema(const DataBaseSchema &schema) override; 52 int SetIAssetLoader(const std::shared_ptr<IAssetLoader> &loader) override; 53 54 int GetStoreInfo(std::string &userId, std::string &appId, std::string &storeId) override; 55 56 int SetTrackerTable(const TrackerSchema &schema) override; 57 int ExecuteSql(const SqlCondition &condition, std::vector<VBucket> &records) override; 58 int CleanTrackerData(const std::string &tableName, int64_t cursor) override; 59 60 int SetReference(const std::vector<TableReferenceProperty> &tableReferenceProperty) override; 61 62 int Pragma(PragmaCmd cmd, PragmaData &pragmaData) override; 63 64 int UpsertData(RecordStatus status, const std::string &tableName, const std::vector<VBucket> &records) override; 65 66 int SetCloudSyncConfig(const CloudSyncConfig &config) override; 67 68 int Sync(const CloudSyncOption &option, const SyncProcessCallback &onProcess, uint64_t taskId) override; 69 70 SyncProcess GetCloudTaskStatus(uint64_t taskId) override; 71 protected: 72 73 int Pragma(int cmd, void *parameter) override; 74 private: 75 76 SQLiteSingleVerRelationalStorageExecutor *GetExecutor(bool isWrite, int &errCode) const; 77 void ReleaseExecutor(SQLiteSingleVerRelationalStorageExecutor *&executor) const; 78 int StartTransaction(); 79 // Commit the transaction 80 int Commit(); 81 82 // Roll back the transaction 83 int RollBack(); 84 85 SQLiteSingleVerRelationalStorageExecutor *writeHandle_ = nullptr; 86 mutable std::mutex transactionMutex_; // used for transaction 87 }; 88 } // namespace DistributedDB 89 #endif 90 #endif // SQLITE_RELATIONAL_STORE_CONNECTION_H