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