From 2e636ac3f69cf34fae1f2635f86517b147ca1b67 Mon Sep 17 00:00:00 2001 From: zhaokaixiao Date: Tue, 16 May 2023 10:22:51 +0000 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B0=83=E7=94=A8=E6=96=B9?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E8=87=AA=E5=AE=9A=E4=B9=89=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=90=8C=E6=AD=A5=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhaokaixiao Change-Id: If3afa5653c495db7b6820eb81287532ccd5a9060 --- .../media_library_helper/src/media_column.cpp | 7 ++++++- .../include/medialibrary_rdbstore.h | 1 + .../src/medialibrary_rdbstore.cpp | 8 ++++++-- .../media_library_helper/include/medialibrary_db_const.h | 9 ++++++--- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp b/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp index aeb737e73d..436877906e 100644 --- a/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp +++ b/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp @@ -111,6 +111,7 @@ const std::string PhotoColumn::CREATE_PHOTOS_DELETE_TRIGGER = PhotoColumn::PHOTOS_TABLE + " FOR EACH ROW WHEN new.dirty = " + std::to_string(static_cast(DirtyTypes::TYPE_DELETED)) + " and OLD.cloud_id is NULL " + + " AND new.dirty = old.dirty AND is_caller_self_func() = 'true'" + " BEGIN " + " DELETE FROM " + PhotoColumn::PHOTOS_TABLE + " WHERE file_id = old.file_id;" + " END;"; @@ -119,10 +120,12 @@ const std::string PhotoColumn::CREATE_PHOTOS_FDIRTY_TRIGGER = "CREATE TRIGGER photos_fdirty_trigger AFTER UPDATE ON " + PhotoColumn::PHOTOS_TABLE + " FOR EACH ROW WHEN OLD.cloud_id IS NOT NULL AND" + " new.date_modified <> old.date_modified " + + " AND new.dirty = old.dirty AND is_caller_self_func() = 'true'" + " BEGIN " + " UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET dirty = " + std::to_string(static_cast(DirtyTypes::TYPE_FDIRTY)) + " WHERE file_id = old.file_id;" + + " SELECT cloud_sync_func(); " + " END;"; const std::string PhotoColumn::CREATE_PHOTOS_MDIRTY_TRIGGER = @@ -130,11 +133,13 @@ const std::string PhotoColumn::CREATE_PHOTOS_MDIRTY_TRIGGER = PhotoColumn::PHOTOS_TABLE + " FOR EACH ROW WHEN OLD.cloud_id IS NOT NULL" + " AND new.date_modified = old.date_modified AND old.dirty = " + std::to_string(static_cast(DirtyTypes::TYPE_SYNCED)) + - " AND new.dirty = old.dirty" + + " AND new.time_visit = old.time_visit " + + " AND new.dirty = old.dirty AND is_caller_self_func() = 'true'" + " BEGIN " + " UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET dirty = " + std::to_string(static_cast(DirtyTypes::TYPE_MDIRTY)) + " WHERE file_id = old.file_id;" + + " SELECT cloud_sync_func(); " + " END;"; const std::string PhotoColumn::CREATE_PHOTOS_INSERT_CLOUD_SYNC = diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_rdbstore.h b/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_rdbstore.h index 5562673dce..846128337d 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_rdbstore.h +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/include/medialibrary_rdbstore.h @@ -73,6 +73,7 @@ private: void SetSyncOpts(MediaLibrarySyncOpts &syncOpts, const std::string &bundleName, const std::string &tableName, int32_t rowId); static const std::string CloudSyncTriggerFunc(const std::vector &args); + static const std::string IsCallerSelfFunc(const std::vector &args); static constexpr int RDB_CONNECT_NUM = 10; static constexpr int RDB_TRANSACTION_WAIT_MS = 1000; std::mutex transactionMutex_; diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp index c4dcbaad50..129c557a85 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp @@ -43,6 +43,11 @@ const std::string MediaLibraryRdbStore::CloudSyncTriggerFunc(const std::vector &args) +{ + return "true"; +} + MediaLibraryRdbStore::MediaLibraryRdbStore(const shared_ptr &context) { if (context == nullptr) { @@ -60,6 +65,7 @@ MediaLibraryRdbStore::MediaLibraryRdbStore(const shared_ptr devices = vector(); GetAllNetworkId(devices); SyncPushTable(bundleName_, cmd.GetTableName(), changedRows, devices); - CloudSyncHelper::GetInstance()->StartSync(); return ret; } @@ -376,7 +381,6 @@ int32_t MediaLibraryRdbStore::Update(int32_t &changedRows, const ValuesBucket &v MEDIA_ERR_LOG("Failed to execute update, err: %{public}d", err); return E_HAS_DB_ERROR; } - CloudSyncHelper::GetInstance()->StartSync(); return changedRows; } diff --git a/interfaces/inner_api/media_library_helper/include/medialibrary_db_const.h b/interfaces/inner_api/media_library_helper/include/medialibrary_db_const.h index 2215b428a3..804fae82de 100644 --- a/interfaces/inner_api/media_library_helper/include/medialibrary_db_const.h +++ b/interfaces/inner_api/media_library_helper/include/medialibrary_db_const.h @@ -471,29 +471,32 @@ const std::string QUERY_MEDIA_VOLUME = "SELECT sum(" + MEDIA_DATA_DB_SIZE + ") A const std::string CREATE_FILES_DELETE_TRIGGER = "CREATE TRIGGER delete_trigger AFTER UPDATE ON " + MEDIALIBRARY_TABLE + " FOR EACH ROW WHEN new.dirty = " + std::to_string(static_cast(DirtyType::TYPE_DELETED)) + - " and OLD.cloud_id is NULL " + + " and OLD.cloud_id is NULL AND is_caller_self_func() = 'true'" + " BEGIN " + " DELETE FROM " + MEDIALIBRARY_TABLE + " WHERE file_id = old.file_id;" + " END;"; const std::string CREATE_FILES_FDIRTY_TRIGGER = "CREATE TRIGGER fdirty_trigger AFTER UPDATE ON " + MEDIALIBRARY_TABLE + " FOR EACH ROW WHEN OLD.cloud_id IS NOT NULL AND" + - " new.date_modified <> old.date_modified " + + " new.date_modified <> old.date_modified AND is_caller_self_func() = 'true'" + " BEGIN " + " UPDATE " + MEDIALIBRARY_TABLE + " SET dirty = " + std::to_string(static_cast(DirtyType::TYPE_FDIRTY)) + " WHERE file_id = old.file_id;" + + " SELECT cloud_sync_func(); " + " END;"; const std::string CREATE_FILES_MDIRTY_TRIGGER = "CREATE TRIGGER mdirty_trigger AFTER UPDATE ON " + MEDIALIBRARY_TABLE + " FOR EACH ROW WHEN OLD.cloud_id IS NOT NULL" + + " AND new.time_visit = old.time_visit " + " AND new.date_modified = old.date_modified AND old.dirty = " + std::to_string(static_cast(DirtyType::TYPE_SYNCED)) + - " AND new.dirty = old.dirty" + + " AND new.dirty = old.dirty AND is_caller_self_func() = 'true'" + " BEGIN " + " UPDATE " + MEDIALIBRARY_TABLE + " SET dirty = " + std::to_string(static_cast(DirtyType::TYPE_MDIRTY)) + " WHERE file_id = old.file_id;" + + " SELECT cloud_sync_func(); " + " END;"; const std::string CREATE_INSERT_CLOUD_SYNC_TRIGGER = -- Gitee