• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 OHOS_MEDIALIBRARY_ACCURATE_REFRESH_BASE_H
17 #define OHOS_MEDIALIBRARY_ACCURATE_REFRESH_BASE_H
18 
19 #include <mutex>
20 #include <vector>
21 
22 #include "accurate_common_data.h"
23 #include "abs_rdb_predicates.h"
24 #include "values_bucket.h"
25 #include "medialibrary_command.h"
26 #include "medialibrary_rdb_transaction.h"
27 #include "dfx_refresh_manager.h"
28 #include "media_log.h"
29 #include "media_file_utils.h"
30 
31 namespace OHOS {
32 namespace Media::AccurateRefresh {
33 #define EXPORT __attribute__ ((visibility ("default")))
34 
35 class EXPORT AccurateRefreshBase {
36 public:
AccurateRefreshBase()37     AccurateRefreshBase() {}
AccurateRefreshBase(std::shared_ptr<TransactionOperations> trans)38     AccurateRefreshBase(std::shared_ptr<TransactionOperations> trans) : trans_(trans) {}
AccurateRefreshBase(const std::string & targetBusiness,std::shared_ptr<TransactionOperations> trans)39     AccurateRefreshBase(const std::string &targetBusiness, std::shared_ptr<TransactionOperations> trans) : trans_(trans)
40     {
41         dfxRefreshManager_ = std::make_shared<AccurateRefresh::DfxRefreshManager>(targetBusiness);
42         dfxRefreshManager_->SetStartTime();
43     }
44     virtual ~AccurateRefreshBase();
45     // init的查询语句
46     virtual int32_t Init() = 0;
47     virtual int32_t Init(const NativeRdb::AbsRdbPredicates &predicates) = 0;
48     virtual int32_t Init(const std::string &sql, const std::vector<NativeRdb::ValueObject> bindArgs) = 0;
49     virtual int32_t Init(const std::vector<int32_t> &keys) = 0; // 删除/更新指定fileIds场景使用
50 
51     // database execution
52     int32_t Insert(MediaLibraryCommand &cmd, int64_t &outRowId);
53     int32_t Insert(int64_t &outRowId, const std::string &table, NativeRdb::ValuesBucket &value);
54 
55     int32_t BatchInsert(MediaLibraryCommand &cmd, int64_t& changedRows,
56         std::vector<NativeRdb::ValuesBucket>& values);
57     int32_t BatchInsert(int64_t &changedRows, const std::string &table,
58         std::vector<NativeRdb::ValuesBucket> &values);
59 
60     int32_t Update(MediaLibraryCommand &cmd, int32_t &changedRows);
61     int32_t Update(int32_t &changedRows, const std::string &table, const NativeRdb::ValuesBucket &value,
62         const std::string &whereClause, const std::vector<std::string> &args);
63     int32_t Update(int32_t &changedRows, const NativeRdb::ValuesBucket &value,
64         const NativeRdb::AbsRdbPredicates &predicates, RdbOperation operation = RDB_OPERATION_UPDATE);
65     int32_t UpdateWithNoDateTime(int32_t &changedRows, const NativeRdb::ValuesBucket &value,
66         const NativeRdb::AbsRdbPredicates &predicates, RdbOperation operation = RDB_OPERATION_UPDATE);
67     int32_t UpdateWithDateTime(NativeRdb::ValuesBucket &values, const NativeRdb::AbsRdbPredicates &predicates);
68 
69     virtual int32_t LogicalDeleteReplaceByUpdate(MediaLibraryCommand &cmd, int32_t &deletedRows);
70     virtual int32_t LogicalDeleteReplaceByUpdate(const NativeRdb::AbsRdbPredicates &predicates, int32_t &deletedRows);
71     int32_t Delete(int32_t &deletedRows, const std::string &table, const std::string &whereClause,
72         const std::vector<std::string> &args);
73     int32_t Delete(int32_t &deletedRows, const NativeRdb::AbsRdbPredicates &predicates);
74 
75     int32_t ExecuteSql(const std::string &sql, RdbOperation operation);
76 
77     // 返回值为rowId
78     int32_t ExecuteForLastInsertedRowId(const std::string &sql,
79         const std::vector<NativeRdb::ValueObject> &bindArgs, RdbOperation operation);
80     int32_t ExecuteSql(const std::string &sql,
81         const std::vector<NativeRdb::ValueObject> &bindArgs, RdbOperation operation);
82     int32_t ExecuteForChangedRowCount(int64_t &outValue, const std::string &sql,
83         const std::vector<NativeRdb::ValueObject> &bindArgs, RdbOperation operation);
84     std::shared_ptr<DfxRefreshManager> GetDfxRefreshManager();
85     void CloseDfxReport();
86 
87 protected:
88     // 数据库操作后,触发更新修改后的数据
89     virtual int32_t UpdateModifiedDatasInner(const std::vector<int32_t> &keys, RdbOperation operation,
90         PendingInfo pendingInfo = PendingInfo()) = 0;
91     virtual std::string GetReturningKeyName() = 0;
92     virtual bool IsValidTable(std::string tableName) = 0;
93     std::shared_ptr<DfxRefreshManager> dfxRefreshManager_;
94 protected:
95     std::shared_ptr<TransactionOperations> trans_;
96 private:
97     std::vector<int32_t> GetReturningKeys(const std::pair<int32_t, NativeRdb::Results> &retWithResults);
98     bool isReport_ = true;
99 };
100 } // namespace Media
101 } // namespace OHOS
102 
103 #endif