1 /* 2 * Copyright (C) 2023 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 #include "photo_map_column.h" 17 18 #include "medialibrary_db_const.h" 19 #include "photo_album_column.h" 20 21 using namespace std; 22 23 namespace OHOS::Media { 24 // PhotoMap table 25 const string PhotoMap::TABLE = "PhotoMap"; 26 const string PhotoMap::ALBUM_ID = "map_album"; 27 const string PhotoMap::ASSET_ID = "map_asset"; 28 const string PhotoMap::DIRTY = "dirty"; 29 30 const string PhotoMap::CREATE_TABLE = CreateTable() + TABLE + 31 " (" + 32 ALBUM_ID + " INT, " + 33 ASSET_ID + " INT, " + 34 DIRTY + " INT DEFAULT " + to_string(static_cast<int32_t>(DirtyTypes::TYPE_NEW)) + ", " + 35 "PRIMARY KEY (" + ALBUM_ID + "," + ASSET_ID + ")" + 36 ")"; 37 38 const string PhotoMap::CREATE_NEW_TRIGGER = 39 " CREATE TRIGGER IF NOT EXISTS album_map_insert_cloud_sync_trigger AFTER INSERT ON " + TABLE + 40 " FOR EACH ROW WHEN new." + DIRTY + " = " + 41 to_string(static_cast<int32_t>(DirtyTypes::TYPE_NEW)) + " AND is_caller_self_func() = 'true'" + 42 " BEGIN UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET " + PhotoColumn::PHOTO_DIRTY + " = " + 43 to_string(static_cast<int32_t>(DirtyTypes::TYPE_MDIRTY)) + " WHERE " + MediaColumn::MEDIA_ID + " = " + 44 "new." + ASSET_ID + " AND " + PhotoColumn::PHOTOS_TABLE + "." + PhotoColumn::PHOTO_DIRTY + " = " + 45 to_string(static_cast<int32_t>(DirtyTypes::TYPE_SYNCED)) + "; SELECT cloud_sync_func(); END;"; 46 47 const string PhotoMap::CREATE_DELETE_TRIGGER = 48 "CREATE TRIGGER IF NOT EXISTS album_map_delete_trigger AFTER UPDATE ON " + TABLE + 49 " FOR EACH ROW WHEN new." + DIRTY + " = " + 50 std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_DELETED)) + 51 " AND is_caller_self_func() = 'true' BEGIN DELETE FROM " + TABLE + 52 " WHERE " + ALBUM_ID + " = old." + ALBUM_ID + " AND " + ASSET_ID + " = old." + ASSET_ID + 53 " AND old." + DIRTY + " = " + std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_NEW)) + 54 "; UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET " + PhotoColumn::PHOTO_DIRTY + " = " + 55 to_string(static_cast<int32_t>(DirtyTypes::TYPE_MDIRTY)) + " WHERE " + MediaColumn::MEDIA_ID + " = " + 56 "new." + ASSET_ID + " AND " + PhotoColumn::PHOTOS_TABLE + "." + PhotoColumn::PHOTO_DIRTY + " = " + 57 to_string(static_cast<int32_t>(DirtyTypes::TYPE_SYNCED)) + " AND " + "old." + 58 PhotoMap::DIRTY + " = " + std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_SYNCED)) + 59 "; SELECT cloud_sync_func(); END;"; 60 61 const string PhotoMap::CREATE_IDX_FILEID_FOR_PHOTO_MAP = CreateIndex() + 62 "idx_fileid_for_photo_map ON PhotoMap ( map_asset );"; 63 } // namespace OHOS::Media 64