diff --git a/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp b/frameworks/innerkitsimpl/media_library_helper/src/media_column.cpp index aeb737e73dcd3095c194d8367c7e6f8c5aab1371..436877906e4ea7cebf4273a0eefef66cf3b320f9 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 5562673dce609ef2e6e6bc35fd3f7f6d38d0c586..846128337d318615f74c7859ada0a8be1c2ea33c 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 c4dcbaad506109e714a6f040490ade69837244de..129c557a8511c267f15606536edb465394a72bae 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 2215b428a3d2b1cab0c47258d256541d36366a89..804fae82de9483870bec49acdf695d26b92d1ee6 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 =