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 "media_column.h"
17
18 #include <string>
19 #include <vector>
20
21 #include "base_column.h"
22 #include "medialibrary_db_const.h"
23 #include "media_log.h"
24 #include "userfile_manager_types.h"
25 #include "highlight_column.h"
26
27 namespace OHOS {
28 namespace Media {
29 using namespace std;
30
31 const std::string MediaColumn::MEDIA_ID = "file_id";
32 const std::string MediaColumn::MEDIA_FILE_PATH = "data";
33 const std::string MediaColumn::MEDIA_SIZE = "size";
34 const std::string MediaColumn::MEDIA_TITLE = "title";
35 const std::string MediaColumn::MEDIA_NAME = "display_name";
36 const std::string MediaColumn::MEDIA_TYPE = "media_type";
37 const std::string MediaColumn::MEDIA_MIME_TYPE = "mime_type";
38 const std::string MediaColumn::MEDIA_OWNER_PACKAGE = "owner_package";
39 const std::string MediaColumn::MEDIA_OWNER_APPID = "owner_appid";
40 const std::string MediaColumn::MEDIA_PACKAGE_NAME = "package_name";
41 const std::string MediaColumn::MEDIA_DEVICE_NAME = "device_name";
42 const std::string MediaColumn::MEDIA_DATE_MODIFIED = "date_modified";
43 const std::string MediaColumn::MEDIA_DATE_ADDED = "date_added";
44 const std::string MediaColumn::MEDIA_DATE_TAKEN = "date_taken";
45 const std::string MediaColumn::MEDIA_DURATION = "duration";
46 const std::string MediaColumn::MEDIA_TIME_PENDING = "time_pending";
47 const std::string MediaColumn::MEDIA_IS_FAV = "is_favorite";
48 const std::string MediaColumn::MEDIA_DATE_TRASHED = "date_trashed";
49 const std::string MediaColumn::MEDIA_DATE_DELETED = "date_deleted";
50 const std::string MediaColumn::MEDIA_HIDDEN = "hidden";
51 const std::string MediaColumn::MEDIA_PARENT_ID = "parent";
52 const std::string MediaColumn::MEDIA_RELATIVE_PATH = "relative_path";
53 const std::string MediaColumn::MEDIA_VIRTURL_PATH = "virtual_path";
54 const std::set<std::string> MediaColumn::MEDIA_COLUMNS = {
55 MEDIA_ID, MEDIA_FILE_PATH, MEDIA_SIZE, MEDIA_TITLE, MEDIA_NAME, MEDIA_TYPE, MEDIA_MIME_TYPE,
56 MEDIA_OWNER_PACKAGE, MEDIA_OWNER_APPID, MEDIA_PACKAGE_NAME, MEDIA_DEVICE_NAME, MEDIA_DATE_MODIFIED,
57 MEDIA_DATE_ADDED, MEDIA_DATE_TAKEN, MEDIA_DURATION, MEDIA_TIME_PENDING, MEDIA_IS_FAV, MEDIA_DATE_TRASHED,
58 MEDIA_DATE_DELETED, MEDIA_HIDDEN, MEDIA_PARENT_ID, MEDIA_RELATIVE_PATH, MEDIA_VIRTURL_PATH
59 };
60 const std::set<std::string> MediaColumn::DEFAULT_FETCH_COLUMNS = {
61 MEDIA_ID, MEDIA_FILE_PATH, MEDIA_NAME, MEDIA_TYPE
62 };
63
64 const std::string PhotoColumn::PHOTO_DIRTY = "dirty";
65 const std::string PhotoColumn::PHOTO_CLOUD_ID = "cloud_id";
66 const std::string PhotoColumn::PHOTO_META_DATE_MODIFIED = "meta_date_modified";
67 const std::string PhotoColumn::PHOTO_SYNC_STATUS = "sync_status";
68 const std::string PhotoColumn::PHOTO_CLOUD_VERSION = "cloud_version";
69 const std::string PhotoColumn::PHOTO_ORIENTATION = "orientation";
70 const std::string PhotoColumn::PHOTO_EXIF_ROTATE = "exif_rotate";
71 const std::string PhotoColumn::PHOTO_LATITUDE = "latitude";
72 const std::string PhotoColumn::PHOTO_LONGITUDE = "longitude";
73 const std::string PhotoColumn::PHOTO_HEIGHT = "height";
74 const std::string PhotoColumn::PHOTO_WIDTH = "width";
75 const std::string PhotoColumn::PHOTO_LCD_VISIT_TIME = "lcd_visit_time";
76 const std::string PhotoColumn::PHOTO_EDIT_TIME = "edit_time";
77 const std::string PhotoColumn::PHOTO_POSITION = "position";
78 const std::string PhotoColumn::PHOTO_SUBTYPE = "subtype";
79 const std::string PhotoColumn::CAMERA_SHOT_KEY = "camera_shot_key";
80 const std::string PhotoColumn::PHOTO_USER_COMMENT = "user_comment";
81 const std::string PhotoColumn::PHOTO_SHOOTING_MODE = "shooting_mode";
82 const std::string PhotoColumn::PHOTO_SHOOTING_MODE_TAG = "shooting_mode_tag";
83 const std::string PhotoColumn::PHOTO_ALL_EXIF = "all_exif";
84 const std::string PhotoColumn::PHOTO_DATE_YEAR = "date_year";
85 const std::string PhotoColumn::PHOTO_DATE_MONTH = "date_month";
86 const std::string PhotoColumn::PHOTO_DATE_DAY = "date_day";
87 const std::string PhotoColumn::PHOTO_LAST_VISIT_TIME = "last_visit_time";
88 const std::string PhotoColumn::PHOTO_HIDDEN_TIME = "hidden_time";
89 const std::string PhotoColumn::PHOTO_THUMB_STATUS = "thumb_status";
90 const std::string PhotoColumn::PHOTO_CLEAN_FLAG = "clean_flag";
91 const std::string PhotoColumn::PHOTO_ID = "photo_id";
92 const std::string PhotoColumn::PHOTO_QUALITY = "photo_quality";
93 const std::string PhotoColumn::PHOTO_FIRST_VISIT_TIME = "first_visit_time";
94 const std::string PhotoColumn::PHOTO_DEFERRED_PROC_TYPE = "deferred_proc_type";
95 const std::string PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE = "dynamic_range_type";
96 const std::string PhotoColumn::MOVING_PHOTO_EFFECT_MODE = "moving_photo_effect_mode";
97 const std::string PhotoColumn::PHOTO_LCD_SIZE = "lcd_size";
98 const std::string PhotoColumn::PHOTO_THUMB_SIZE = "thumb_size";
99 const std::string PhotoColumn::PHOTO_HAS_ASTC = "has_astc"; // This attribute has been replaced by "thumbnail_ready"
100 const std::string PhotoColumn::PHOTO_IS_TEMP = "is_temp";
101 const std::string PhotoColumn::PHOTO_THUMBNAIL_READY = "thumbnail_ready";
102 const std::string PhotoColumn::PHOTO_THUMBNAIL_VISIBLE = "thumbnail_visible";
103 const std::string PhotoColumn::PHOTO_FRONT_CAMERA = "front_camera";
104 const std::string PhotoColumn::PHOTO_BURST_COVER_LEVEL = "burst_cover_level";
105 const std::string PhotoColumn::PHOTO_BURST_KEY = "burst_key";
106 const std::string PhotoColumn::PHOTO_COVER_POSITION = "cover_position";
107 const std::string PhotoColumn::PHOTO_IS_RECTIFICATION_COVER = "is_rectification_cover";
108 const std::string PhotoColumn::PHOTO_ORIGINAL_SUBTYPE = "original_subtype";
109 const std::string PhotoColumn::PHOTO_DETAIL_TIME = "detail_time";
110 const std::string PhotoColumn::PHOTO_OWNER_ALBUM_ID = "owner_album_id";
111 const std::string PhotoColumn::PHOTO_ORIGINAL_ASSET_CLOUD_ID = "original_asset_cloud_id";
112 const std::string PhotoColumn::PHOTO_SOURCE_PATH = "source_path";
113 const std::string PhotoColumn::PHOTO_CE_AVAILABLE = "ce_available";
114 const std::string PhotoColumn::PHOTO_CE_STATUS_CODE = "ce_status_code";
115 const std::string PhotoColumn::PHOTO_STRONG_ASSOCIATION = "strong_association";
116 const std::string PhotoColumn::PHOTO_ASSOCIATE_FILE_ID = "associate_file_id";
117 const std::string PhotoColumn::PHOTO_HAS_CLOUD_WATERMARK = "has_cloud_watermark";
118 const std::string PhotoColumn::SUPPORTED_WATERMARK_TYPE = "supported_watermark_type";
119 const std::string PhotoColumn::PHOTO_METADATA_FLAGS = "metadata_flags";
120 const std::string PhotoColumn::PHOTO_CHECK_FLAG = "check_flag";
121 const std::string PhotoColumn::STAGE_VIDEO_TASK_STATUS = "stage_video_task_status";
122 const std::string PhotoColumn::PHOTO_IS_AUTO = "is_auto";
123 const std::string PhotoColumn::PHOTO_MEDIA_SUFFIX = "media_suffix";
124 const std::string PhotoColumn::PHOTO_REAL_LCD_VISIT_TIME = "real_lcd_visit_time";
125 const std::string PhotoColumn::PHOTO_VISIT_COUNT = "visit_count";
126 const std::string PhotoColumn::PHOTO_LCD_VISIT_COUNT = "lcd_visit_count";
127 const std::string PhotoColumn::PHOTO_IS_RECENT_SHOW = "is_recent_show";
128
129 const std::string PhotoColumn::PHOTO_CLOUD_ID_INDEX = "cloud_id_index";
130 const std::string PhotoColumn::PHOTO_DATE_YEAR_INDEX = "date_year_index";
131 const std::string PhotoColumn::PHOTO_DATE_MONTH_INDEX = "date_month_index";
132 const std::string PhotoColumn::PHOTO_DATE_DAY_INDEX = "date_day_index";
133 const std::string PhotoColumn::PHOTO_SCHPT_ADDED_INDEX = "idx_schpt_date_added";
134 // index of date_added for photo table
135 const std::string PhotoColumn::PHOTO_SCHPT_PHOTO_DATEADDED_INDEX = "idx_schpt_date_added_new";
136 const std::string PhotoColumn::PHOTO_SCHPT_ADDED_ALBUM_INDEX = "idx_schpt_date_added_album";
137 const std::string PhotoColumn::PHOTO_SCHPT_ALBUM_GENERAL_INDEX = "idx_schpt_album_general";
138 const std::string PhotoColumn::PHOTO_SCHPT_ALBUM_INDEX = "idx_schpt_album";
139 const std::string PhotoColumn::PHOTO_SCHPT_MEDIA_TYPE_INDEX = "idx_schpt_media_type";
140 const std::string PhotoColumn::PHOTO_SCHPT_DAY_INDEX = "idx_schpt_date_day";
141 const std::string PhotoColumn::PHOTO_HIDDEN_TIME_INDEX = "hidden_time_index";
142 const std::string PhotoColumn::PHOTO_SCHPT_HIDDEN_TIME_INDEX = "idx_schpt_hidden_time";
143 const std::string PhotoColumn::PHOTO_FAVORITE_INDEX = "idx_photo_is_favorite";
144 const std::string PhotoColumn::PHOTO_DISPLAYNAME_INDEX = "idx_display_name";
145 const std::string PhotoColumn::PHOTO_SCHPT_READY_INDEX = "idx_schpt_thumbnail_ready";
146 const std::string PhotoColumn::PHOTO_BURSTKEY_INDEX = "idx_burstkey";
147 const std::string PhotoColumn::PHOTO_SCHPT_MEDIA_TYPE_COUNT_READY_INDEX = "idx_schpt_media_type_ready";
148 const std::string PhotoColumn::PHOTO_SCHPT_DATE_YEAR_COUNT_READY_INDEX = "idx_schpt_date_year_ready";
149 const std::string PhotoColumn::PHOTO_SCHPT_DATE_MONTH_COUNT_READY_INDEX = "idx_schpt_date_month_ready";
150 const std::string PhotoColumn::PHOTO_SCHPT_CLOUD_ENHANCEMENT_ALBUM_INDEX = "idx_schpt_cloud_enhancement_album_index";
151 const std::string PhotoColumn::LATITUDE_INDEX = "idx_latitude";
152 const std::string PhotoColumn::LONGITUDE_INDEX = "idx_longtitude";
153 const std::string PhotoColumn::PHOTO_SORT_MEDIA_TYPE_DATE_ADDED_INDEX = "idx_photo_sort_media_type_date_added";
154 const std::string PhotoColumn::PHOTO_SORT_MEDIA_TYPE_DATE_TAKEN_INDEX = "idx_photo_sort_media_type_date_taken";
155 const std::string PhotoColumn::PHOTO_SORT_IN_ALBUM_DATE_ADDED_INDEX = "idx_photo_sort_in_album_date_added";
156 const std::string PhotoColumn::PHOTO_SORT_IN_ALBUM_DATE_TAKEN_INDEX = "idx_photo_sort_in_album_date_taken";
157 const std::string PhotoColumn::PHOTO_QUERY_THUMBNAIL_WHITE_BLOCKS_INDEX = "idx_query_thumbnail_white_blocks_num";
158 const std::string PhotoColumn::PHOTO_SHOOTING_MODE_ALBUM_GENERAL_INDEX = "idx_shooting_mode_album_general";
159 const std::string PhotoColumn::PHOTO_BURST_MODE_ALBUM_INDEX = "idx_burst_mode_album";
160 const std::string PhotoColumn::PHOTO_FRONT_CAMERA_ALBUM_INDEX = "idx_front_camera_album";
161 const std::string PhotoColumn::PHOTO_RAW_IMAGE_ALBUM_INDEX = "idx_raw_image_album";
162 const std::string PhotoColumn::PHOTO_MOVING_PHOTO_ALBUM_INDEX = "idx_moving_photo_album";
163
164 const std::string PhotoColumn::PHOTO_DATE_YEAR_FORMAT = "%Y";
165 const std::string PhotoColumn::PHOTO_DATE_MONTH_FORMAT = "%Y%m";
166 const std::string PhotoColumn::PHOTO_DATE_DAY_FORMAT = "%Y%m%d";
167 const std::string PhotoColumn::PHOTO_DETAIL_TIME_FORMAT = "%Y:%m:%d %H:%M:%S";
168
169 const std::string PhotoColumn::PHOTOS_TABLE = "Photos";
170 const std::string PhotoColumn::TAB_OLD_PHOTOS_TABLE = "tab_old_photos";
171 const std::string PhotoColumn::TAB_ASSET_AND_ALBUM_OPERATION_TABLE = "tab_asset_and_album_operation";
172
173 const std::string PhotoColumn::FILES_CLOUD_DIR = "/storage/cloud/files/";
174 const std::string PhotoColumn::FILES_LOCAL_DIR = "/storage/media/local/files/";
175
176 const std::string PhotoColumn::HIGHLIGHT_TABLE = "tab_analysis_video_label";
177 const std::string PhotoColumn::MEDIA_DATA_DB_HIGHLIGHT_TRIGGER = "trigger_generate_thumbnail";
178
179 const std::string PhotoColumn::PHOTO_URI_PREFIX = "file://media/Photo/";
180 const std::string PhotoColumn::DEFAULT_PHOTO_URI = "file://media/Photo";
181 const std::string PhotoColumn::PHOTO_CACHE_URI_PREFIX = "file://media/Photo/cache/";
182 const std::string PhotoColumn::PHOTO_TYPE_URI = "/Photo";
183 const std::string PhotoColumn::HIGHTLIGHT_COVER_URI = "/highlight";
184 const std::string PhotoColumn::HIGHTLIGHT_URI = "/highlight/video";
185 const std::string PhotoColumn::HIDDEN_PHOTO_URI_PREFIX = "file://media/hiddenPhoto/";
186 const std::string PhotoColumn::TRASHED_PHOTO_URI_PREFIX = "file://media/trashedPhoto/";
187
188 const std::string PhotoColumn::PHOTO_CLOUD_URI_PREFIX = "file://cloudsync/Photo/";
189 const std::string PhotoColumn::PHOTO_CLOUD_TRIGGER_PREFIX = "file://cloudsync/triggerGeneration/";
190 const std::string PhotoColumn::PHOTO_GALLERY_CLOUD_URI_PREFIX = "file://cloudsync/gallery/Photo/";
191
192 const std::string PhotoColumn::PHOTO_HEIGHT_ERROR_URI_PREFIX = "file://cloudsync/Photo/HeightError/";
193 const std::string PhotoColumn::PHOTO_DOWNLOAD_SUCCEED_URI_PREFIX = "file://cloudsync/Photo/DownloadSucceed/";
194
195 const std::string PhotoColumn::PHOTO_CLOUD_GALLERY_REBUILD_URI_PREFIX = "file://cloudsync/gallery/rebuild/";
196
197 const std::string PhotoColumn::PHOTO_REQUEST_PICTURE = "file://media/Photo/picture/";
198 const std::string PhotoColumn::PHOTO_REQUEST_PICTURE_BUFFER = "file://media/Photo/pictureBuffer/";
199
200 const std::set<std::string> PhotoColumn::DEFAULT_FETCH_COLUMNS = {
201 PHOTO_SUBTYPE, PHOTO_BURST_KEY,
202 };
203
204 const std::string PhotoColumn::CREATE_PHOTO_TABLE = "CREATE TABLE IF NOT EXISTS " +
205 PHOTOS_TABLE + " (" +
206 MEDIA_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
207 MEDIA_FILE_PATH + " TEXT, " +
208 MEDIA_SIZE + " BIGINT, " +
209 MEDIA_TITLE + " TEXT, " +
210 MEDIA_NAME + " TEXT, " +
211 MEDIA_TYPE + " INT, " +
212 MEDIA_MIME_TYPE + " TEXT, " +
213 MEDIA_OWNER_PACKAGE + " TEXT, " +
214 MEDIA_OWNER_APPID + " TEXT, " +
215 MEDIA_PACKAGE_NAME + " TEXT, " +
216 MEDIA_DEVICE_NAME + " TEXT, " +
217 MEDIA_DATE_ADDED + " BIGINT, " +
218 MEDIA_DATE_MODIFIED + " BIGINT, " +
219 MEDIA_DATE_TAKEN + " BIGINT DEFAULT 0, " +
220 MEDIA_DURATION + " INT, " +
221 MEDIA_TIME_PENDING + " BIGINT DEFAULT 0, " +
222 MEDIA_IS_FAV + " INT DEFAULT 0, " +
223 MEDIA_DATE_TRASHED + " BIGINT DEFAULT 0, " +
224 MEDIA_DATE_DELETED + " BIGINT DEFAULT 0, " +
225 MEDIA_HIDDEN + " INT DEFAULT 0, " +
226 MEDIA_PARENT_ID + " INT DEFAULT 0, " +
227 MEDIA_RELATIVE_PATH + " TEXT, " +
228 MEDIA_VIRTURL_PATH + " TEXT UNIQUE, " +
229 PHOTO_DIRTY + " INT DEFAULT 1, " +
230 PHOTO_CLOUD_ID + " TEXT, " +
231 PHOTO_META_DATE_MODIFIED + " BIGINT DEFAULT 0, " +
232 PHOTO_SYNC_STATUS + " INT DEFAULT 0, " +
233 PHOTO_CLOUD_VERSION + " BIGINT DEFAULT 0, " +
234 PHOTO_ORIENTATION + " INT DEFAULT 0, " +
235 PHOTO_EXIF_ROTATE + " INT NOT NULL DEFAULT 0, " +
236 PHOTO_LATITUDE + " DOUBLE DEFAULT 0, " +
237 PHOTO_LONGITUDE + " DOUBLE DEFAULT 0, " +
238 PHOTO_HEIGHT + " INT, " +
239 PHOTO_WIDTH + " INT, " +
240 PHOTO_EDIT_TIME + " BIGINT DEFAULT 0, " +
241 PHOTO_LCD_VISIT_TIME + " BIGINT DEFAULT 0, " +
242 PHOTO_POSITION + " INT DEFAULT 1, " +
243 PHOTO_SUBTYPE + " INT DEFAULT 0, " +
244 PHOTO_ORIGINAL_SUBTYPE + " INT," +
245 CAMERA_SHOT_KEY + " TEXT, " +
246 PHOTO_USER_COMMENT + " TEXT, " +
247 PHOTO_ALL_EXIF + " TEXT, " +
248 PHOTO_DATE_YEAR + " TEXT, " +
249 PHOTO_DATE_MONTH + " TEXT, " +
250 PHOTO_DATE_DAY + " TEXT, " +
251 PHOTO_SHOOTING_MODE + " TEXT, " +
252 PHOTO_SHOOTING_MODE_TAG + " TEXT, " +
253 PHOTO_LAST_VISIT_TIME + " BIGINT DEFAULT 0, " +
254 PHOTO_HIDDEN_TIME + " BIGINT DEFAULT 0, " +
255 PHOTO_THUMB_STATUS + " INT DEFAULT 0, " +
256 PHOTO_CLEAN_FLAG + " INT DEFAULT 0, " +
257 PHOTO_ID + " TEXT, " +
258 PHOTO_QUALITY + " INT, " +
259 PHOTO_FIRST_VISIT_TIME + " BIGINT DEFAULT 0, " +
260 PHOTO_DEFERRED_PROC_TYPE + " INT DEFAULT 0, " +
261 PHOTO_DYNAMIC_RANGE_TYPE + " INT DEFAULT 0, " +
262 MOVING_PHOTO_EFFECT_MODE + " INT DEFAULT 0, " +
263 PHOTO_COVER_POSITION + " BIGINT DEFAULT 0, " +
264 PHOTO_IS_RECTIFICATION_COVER + " INT NOT NULL DEFAULT 0, " +
265 PHOTO_THUMBNAIL_READY + " BIGINT DEFAULT 0, " +
266 PHOTO_LCD_SIZE + " TEXT, " +
267 PHOTO_THUMB_SIZE + " TEXT," +
268 PHOTO_FRONT_CAMERA + " TEXT, " +
269 PHOTO_IS_TEMP + " INT DEFAULT 0," +
270 PHOTO_BURST_COVER_LEVEL + " INT DEFAULT 1, " +
271 PHOTO_BURST_KEY + " TEXT, " +
272 PHOTO_DETAIL_TIME + " TEXT, " +
273 PHOTO_OWNER_ALBUM_ID + " INT DEFAULT 0, " +
274 PHOTO_ORIGINAL_ASSET_CLOUD_ID + " TEXT, " +
275 PHOTO_SOURCE_PATH + " TEXT, " +
276 PHOTO_CE_AVAILABLE + " INT DEFAULT 0, " +
277 PHOTO_CE_STATUS_CODE + " INT, " +
278 PHOTO_STRONG_ASSOCIATION + " INT DEFAULT 0, " +
279 PHOTO_ASSOCIATE_FILE_ID + " INT DEFAULT 0, " +
280 PHOTO_HAS_CLOUD_WATERMARK + " INT DEFAULT 0, " +
281 PHOTO_THUMBNAIL_VISIBLE + " INT DEFAULT 0, " +
282 SUPPORTED_WATERMARK_TYPE + " INT, " +
283 PHOTO_METADATA_FLAGS + " INT DEFAULT 0, " +
284 PHOTO_CHECK_FLAG + " INT DEFAULT 0, " +
285 STAGE_VIDEO_TASK_STATUS + " INT NOT NULL DEFAULT 0, " +
286 PHOTO_IS_AUTO + " INT NOT NULL DEFAULT 0, " +
287 PHOTO_MEDIA_SUFFIX + " TEXT, " +
288 PHOTO_IS_RECENT_SHOW + " INT NOT NULL DEFAULT 1, " +
289 PHOTO_REAL_LCD_VISIT_TIME + " BIGINT NOT NULL DEFAULT 0, " +
290 PHOTO_VISIT_COUNT + " INT NOT NULL DEFAULT 0, " +
291 PHOTO_LCD_VISIT_COUNT + " INT NOT NULL DEFAULT 0" +
292 ") ";
293
294 const std::string PhotoColumn::CREATE_CLOUD_ID_INDEX = BaseColumn::CreateIndex() +
295 PHOTO_CLOUD_ID_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_CLOUD_ID + " DESC)";
296
297 const std::string PhotoColumn::CREATE_YEAR_INDEX = BaseColumn::CreateIndex() +
298 PHOTO_DATE_YEAR_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_DATE_YEAR + " DESC)";
299
300 const std::string PhotoColumn::CREATE_MONTH_INDEX = BaseColumn::CreateIndex() +
301 PHOTO_DATE_MONTH_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_DATE_MONTH + " DESC)";
302
303 const std::string PhotoColumn::CREATE_DAY_INDEX = BaseColumn::CreateIndex() +
304 PHOTO_DATE_DAY_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_DATE_DAY + " DESC)";
305
306 const std::string PhotoColumn::CREATE_SCHPT_DAY_INDEX = BaseColumn::CreateIndex() + PHOTO_SCHPT_DAY_INDEX + " ON " +
307 PHOTOS_TABLE + " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," +
308 MEDIA_TIME_PENDING + "," + MEDIA_HIDDEN + "," + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," +
309 PHOTO_DATE_DAY + " DESC, " + PHOTO_THUMBNAIL_VISIBLE + ");";
310
311 const std::string PhotoColumn::DROP_SCHPT_DAY_INDEX = BaseColumn::DropIndex() + PHOTO_SCHPT_DAY_INDEX;
312
313 const std::string PhotoColumn::DROP_SCHPT_MEDIA_TYPE_INDEX = "DROP INDEX IF EXISTS " + PHOTO_SCHPT_MEDIA_TYPE_INDEX;
314
315 const std::string PhotoColumn::CREATE_SCHPT_MEDIA_TYPE_INDEX = BaseColumn::CreateIndex() +
316 PHOTO_SCHPT_MEDIA_TYPE_INDEX + " ON " + PHOTOS_TABLE +
317 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
318 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + MEDIA_TYPE + "," + PHOTO_BURST_COVER_LEVEL +
319 "," + MEDIA_DATE_ADDED + " DESC);";
320
321 const std::string PhotoColumn::CREATE_SCHPT_YEAR_COUNT_READY_INDEX = BaseColumn::CreateIndex() +
322 PHOTO_SCHPT_DATE_YEAR_COUNT_READY_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_SYNC_STATUS + "," +
323 PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_TIME_PENDING + "," + MEDIA_HIDDEN + "," + PHOTO_IS_TEMP +
324 "," + PHOTO_BURST_COVER_LEVEL + "," + PHOTO_DATE_YEAR + " DESC, " + PHOTO_THUMBNAIL_VISIBLE + ");";
325
326 const std::string PhotoColumn::CREATE_SCHPT_MONTH_COUNT_READY_INDEX = BaseColumn::CreateIndex() +
327 PHOTO_SCHPT_DATE_MONTH_COUNT_READY_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_SYNC_STATUS + "," +
328 PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_TIME_PENDING + "," + MEDIA_HIDDEN + "," + PHOTO_IS_TEMP +
329 "," + PHOTO_BURST_COVER_LEVEL + "," + PHOTO_DATE_MONTH + " DESC, " + PHOTO_THUMBNAIL_VISIBLE + ");";
330
331 const std::string PhotoColumn::CREATE_SCHPT_MEDIA_TYPE_COUNT_READY_INDEX = BaseColumn::CreateIndex() +
332 PHOTO_SCHPT_MEDIA_TYPE_COUNT_READY_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_SYNC_STATUS + "," +
333 PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_TIME_PENDING + "," + MEDIA_HIDDEN + ", " + PHOTO_IS_TEMP +
334 "," + PHOTO_BURST_COVER_LEVEL + "," + MEDIA_TYPE + "," + PHOTO_THUMBNAIL_VISIBLE + ");";
335
336 const std::string PhotoColumn::CREATE_SCHPT_CLOUD_ENHANCEMENT_ALBUM_INDEX =
337 BaseColumn::CreateIndex() + PHOTO_SCHPT_CLOUD_ENHANCEMENT_ALBUM_INDEX + " ON " + PHOTOS_TABLE +
338 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_HIDDEN + "," + MEDIA_TIME_PENDING +
339 "," + MEDIA_DATE_TRASHED + "," + PHOTO_IS_TEMP + "," + PHOTO_STRONG_ASSOCIATION + "," + PHOTO_BURST_COVER_LEVEL +
340 "," + MEDIA_DATE_TAKEN + " DESC);";
341
342 const std::string PhotoColumn::DROP_SCHPT_YEAR_COUNT_READY_INDEX = "DROP INDEX IF EXISTS " +
343 PHOTO_SCHPT_DATE_YEAR_COUNT_READY_INDEX;
344
345 const std::string PhotoColumn::DROP_SCHPT_MONTH_COUNT_READY_INDEX = "DROP INDEX IF EXISTS " +
346 PHOTO_SCHPT_DATE_MONTH_COUNT_READY_INDEX;
347
348 const std::string PhotoColumn::DROP_SCHPT_MEDIA_TYPE_COUNT_READY_INDEX = "DROP INDEX IF EXISTS " +
349 PHOTO_SCHPT_MEDIA_TYPE_COUNT_READY_INDEX;
350
351 const std::string PhotoColumn::CREATE_HIDDEN_TIME_INDEX = BaseColumn::CreateIndex() +
352 PHOTO_HIDDEN_TIME_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_HIDDEN_TIME + " DESC)";
353
354 const std::string PhotoColumn::CREATE_SCHPT_HIDDEN_TIME_INDEX =
355 BaseColumn::CreateIndex() + PHOTO_SCHPT_HIDDEN_TIME_INDEX + " ON " + PHOTOS_TABLE +
356 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_HIDDEN + "," + MEDIA_TIME_PENDING +
357 "," + MEDIA_DATE_TRASHED + "," + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL +
358 "," + PHOTO_HIDDEN_TIME + " DESC);";
359
360 const std::string PhotoColumn::DROP_SCHPT_HIDDEN_TIME_INDEX = BaseColumn::DropIndex() + PHOTO_SCHPT_HIDDEN_TIME_INDEX;
361
362 const std::string PhotoColumn::CREATE_PHOTO_FAVORITE_INDEX =
363 BaseColumn::CreateIndex() + PHOTO_FAVORITE_INDEX + " ON " + PHOTOS_TABLE +
364 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_HIDDEN + "," + MEDIA_TIME_PENDING +
365 "," + MEDIA_DATE_TRASHED + "," + PHOTO_IS_TEMP + "," + MEDIA_IS_FAV + "," + PHOTO_BURST_COVER_LEVEL +
366 "," + MEDIA_DATE_TAKEN + " DESC);";
367
368 const std::string PhotoColumn::DROP_PHOTO_FAVORITE_INDEX = BaseColumn::DropIndex() + PHOTO_FAVORITE_INDEX;
369
370 const std::string PhotoColumn::CREATE_PHOTO_DISPLAYNAME_INDEX = BaseColumn::CreateIndex() +
371 PHOTO_DISPLAYNAME_INDEX + " ON " + PHOTOS_TABLE + " (" + MediaColumn::MEDIA_NAME + ")";
372
373 const std::string PhotoColumn::CREATE_PHOTO_BURSTKEY_INDEX = BaseColumn::CreateIndex() + PHOTO_BURSTKEY_INDEX +
374 " ON " + PHOTOS_TABLE + " (" + PHOTO_BURST_KEY + "," + MEDIA_TIME_PENDING + "," + MEDIA_NAME + " ASC);";
375
376 const std::string PhotoColumn::QUERY_MEDIA_VOLUME = "SELECT sum(" + MediaColumn::MEDIA_SIZE + ") AS " +
377 MediaColumn::MEDIA_SIZE + "," +
378 MediaColumn::MEDIA_TYPE + " FROM " +
379 PhotoColumn::PHOTOS_TABLE + " WHERE " +
380 "(" + MediaColumn::MEDIA_TYPE + " = " + std::to_string(MEDIA_TYPE_IMAGE) + " OR " +
381 MediaColumn::MEDIA_TYPE + " = " + std::to_string(MEDIA_TYPE_VIDEO) + ") AND " +
382 PhotoColumn::PHOTO_POSITION + " != 2" + " GROUP BY " +
383 MediaColumn::MEDIA_TYPE;
384
385 // Create indexes
386 const std::string PhotoColumn::INDEX_SCTHP_ADDTIME =
387 BaseColumn::CreateIndex() + PHOTO_SCHPT_ADDED_INDEX + " ON " + PHOTOS_TABLE +
388 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN + "," +
389 MEDIA_TIME_PENDING + "," + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," + MEDIA_DATE_TAKEN + " DESC, " +
390 MEDIA_ID + " DESC);";
391
392 const std::string PhotoColumn::INDEX_SCHPT_ALBUM_GENERAL =
393 BaseColumn::CreateIndex() + PHOTO_SCHPT_ALBUM_GENERAL_INDEX + " ON " + PHOTOS_TABLE +
394 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," +
395 MEDIA_HIDDEN + "," + MEDIA_TIME_PENDING + "," + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL +
396 "," + PHOTO_OWNER_ALBUM_ID + ");";
397
398 const std::string PhotoColumn::INDEX_SCHPT_ALBUM =
399 BaseColumn::CreateIndex() + PHOTO_SCHPT_ALBUM_INDEX + " ON " + PHOTOS_TABLE +
400 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN + "," +
401 MEDIA_TIME_PENDING + "," + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," + PHOTO_OWNER_ALBUM_ID + "," +
402 MEDIA_DATE_TAKEN + " DESC, " + MEDIA_ID + " DESC);";
403
404 // Create dateadded index
405 const std::string PhotoColumn::INDEX_SCTHP_PHOTO_DATEADDED =
406 BaseColumn::CreateIndex() + PHOTO_SCHPT_PHOTO_DATEADDED_INDEX + " ON " + PHOTOS_TABLE +
407 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN + "," +
408 MEDIA_TIME_PENDING + "," + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," + MEDIA_DATE_ADDED + " DESC);";
409
410 const std::string PhotoColumn::INDEX_LATITUDE =
411 BaseColumn::CreateIndex() + LATITUDE_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_LATITUDE + ");";
412
413 const std::string PhotoColumn::INDEX_LONGITUDE =
414 BaseColumn::CreateIndex() + LONGITUDE_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_LONGITUDE + ");";
415
416 const std::string PhotoColumn::UPDATE_LATITUDE_AND_LONGITUDE_DEFAULT_NULL =
417 " UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET " + PhotoColumn::PHOTO_LATITUDE +
418 " = NULL, " + PhotoColumn::PHOTO_LONGITUDE + " = NULL " + " WHERE " +
419 PhotoColumn::PHOTO_LATITUDE + " = 0 AND " + PhotoColumn::PHOTO_LONGITUDE + " = 0;";
420
421 const std::string PhotoColumn::INDEX_QUERY_THUMBNAIL_WHITE_BLOCKS =
422 BaseColumn::CreateIndex() + PHOTO_QUERY_THUMBNAIL_WHITE_BLOCKS_INDEX + " ON " + PHOTOS_TABLE +
423 " (" + MEDIA_TYPE + "," + PHOTO_SYNC_STATUS + "," + PHOTO_LCD_VISIT_TIME + "," + PHOTO_POSITION + "," +
424 PHOTO_THUMB_STATUS + "," + PHOTO_CLEAN_FLAG + "," + PHOTO_THUMBNAIL_VISIBLE + " );";
425
426 const std::string PhotoColumn::UPDATE_PHOTO_QUALITY_OF_NULL_PHOTO_ID =
427 " UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET " + PhotoColumn::PHOTO_QUALITY + " = 0 WHERE " +
428 PhotoColumn::PHOTO_QUALITY + " = 1 AND " + PhotoColumn::PHOTO_ID + " IS NULL;";
429
430 const std::string PhotoColumn::DROP_INDEX_SCTHP_ADDTIME = BaseColumn::DropIndex() + PHOTO_SCHPT_ADDED_INDEX;
431
432 const std::string PhotoColumn::DROP_INDEX_SCHPT_ADDTIME_ALBUM = BaseColumn::DropIndex() + PHOTO_SCHPT_ADDED_ALBUM_INDEX;
433
434 const std::string PhotoColumn::INDEX_CAMERA_SHOT_KEY =
435 BaseColumn::CreateIndex() + "idx_camera_shot_key" + " ON " + PHOTOS_TABLE +
436 " (" + CAMERA_SHOT_KEY + ");";
437
438 const std::string PhotoColumn::INDEX_SCHPT_READY = BaseColumn::CreateIndex() + PHOTO_SCHPT_READY_INDEX + " ON " +
439 PHOTOS_TABLE + " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," +
440 MEDIA_TIME_PENDING + ", " + MEDIA_HIDDEN + "," + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," +
441 MEDIA_DATE_TAKEN + " DESC, " + MEDIA_ID + " DESC, " + PHOTO_THUMBNAIL_VISIBLE + ");";
442
443 const std::string PhotoColumn::DROP_INDEX_SCHPT_READY = BaseColumn::DropIndex() + PHOTO_SCHPT_READY_INDEX;
444
445 const std::string PhotoColumn::CREATE_PHOTO_SORT_MEDIA_TYPE_DATE_ADDED_INDEX = BaseColumn::CreateIndex() +
446 PHOTO_SORT_MEDIA_TYPE_DATE_ADDED_INDEX + " ON " + PHOTOS_TABLE +
447 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
448 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + MEDIA_TYPE + "," + PHOTO_BURST_COVER_LEVEL +
449 "," + MEDIA_DATE_ADDED + " DESC," + MEDIA_NAME + " DESC);";
450
451 const std::string PhotoColumn::CREATE_PHOTO_SORT_MEDIA_TYPE_DATE_TAKEN_INDEX = BaseColumn::CreateIndex() +
452 PHOTO_SORT_MEDIA_TYPE_DATE_TAKEN_INDEX + " ON " + PHOTOS_TABLE +
453 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
454 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + MEDIA_TYPE + "," + PHOTO_BURST_COVER_LEVEL +
455 "," + MEDIA_DATE_TAKEN + " DESC," + MEDIA_NAME + " DESC);";
456
457 const std::string PhotoColumn::CREATE_PHOTO_SORT_IN_ALBUM_DATE_ADDED_INDEX = BaseColumn::CreateIndex() +
458 PHOTO_SORT_IN_ALBUM_DATE_ADDED_INDEX + " ON " + PHOTOS_TABLE +
459 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
460 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," + PHOTO_OWNER_ALBUM_ID +
461 "," + MEDIA_DATE_ADDED + " DESC," + MEDIA_NAME + " DESC);";
462
463 const std::string PhotoColumn::CREATE_PHOTO_SORT_IN_ALBUM_DATE_TAKEN_INDEX = BaseColumn::CreateIndex() +
464 PHOTO_SORT_IN_ALBUM_DATE_TAKEN_INDEX + " ON " + PHOTOS_TABLE +
465 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
466 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," + PHOTO_OWNER_ALBUM_ID +
467 "," + MEDIA_DATE_TAKEN + " DESC," + MEDIA_NAME + " DESC);";
468
469 const std::string PhotoColumn::CREATE_PHOTO_SHOOTING_MODE_ALBUM_GENERAL_INDEX = BaseColumn::CreateIndex() +
470 PHOTO_SHOOTING_MODE_ALBUM_GENERAL_INDEX + " ON " + PHOTOS_TABLE +
471 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
472 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," + PHOTO_SHOOTING_MODE +
473 "," + MEDIA_DATE_TAKEN + " DESC," + MEDIA_NAME + " DESC);";
474
475 const std::string PhotoColumn::CREATE_PHOTO_BURST_MODE_ALBUM_INDEX = BaseColumn::CreateIndex() +
476 PHOTO_BURST_MODE_ALBUM_INDEX + " ON " + PHOTOS_TABLE +
477 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
478 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," + PHOTO_SUBTYPE +
479 "," + PHOTO_BURST_KEY + "," + MEDIA_DATE_TAKEN + " DESC," + MEDIA_NAME + " DESC);";
480
481 const std::string PhotoColumn::CREATE_PHOTO_FRONT_CAMERA_ALBUM_INDEX = BaseColumn::CreateIndex() +
482 PHOTO_FRONT_CAMERA_ALBUM_INDEX + " ON " + PHOTOS_TABLE +
483 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
484 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," + PHOTO_FRONT_CAMERA +
485 "," + MEDIA_DATE_TAKEN + " DESC," + MEDIA_NAME + " DESC);";
486
487 const std::string PhotoColumn::CREATE_PHOTO_RAW_IMAGE_ALBUM_INDEX = BaseColumn::CreateIndex() +
488 PHOTO_RAW_IMAGE_ALBUM_INDEX + " ON " + PHOTOS_TABLE +
489 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
490 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL + "," + MEDIA_MIME_TYPE +
491 "," + MEDIA_DATE_TAKEN + " DESC," + MEDIA_NAME + " DESC);";
492
493 const std::string PhotoColumn::CREATE_PHOTO_MOVING_PHOTO_ALBUM_INDEX = BaseColumn::CreateIndex() +
494 PHOTO_MOVING_PHOTO_ALBUM_INDEX + " ON " + PHOTOS_TABLE +
495 " (" + PHOTO_SYNC_STATUS + "," + PHOTO_CLEAN_FLAG + "," + MEDIA_DATE_TRASHED + "," + MEDIA_HIDDEN +
496 "," + MEDIA_TIME_PENDING + ", " + PHOTO_IS_TEMP + "," + PHOTO_BURST_COVER_LEVEL +
497 "," + MEDIA_DATE_TAKEN + " DESC," + MEDIA_NAME + " DESC) "
498 "WHERE (subtype = " + to_string(static_cast<int32_t>(PhotoSubType::MOVING_PHOTO)) +
499 " OR (moving_photo_effect_mode = " + to_string(static_cast<int32_t>(MovingPhotoEffectMode::IMAGE_ONLY)) +
500 " AND subtype = " + to_string(static_cast<int32_t>(PhotoSubType::DEFAULT)) + "));";
501
502 const std::string PhotoColumn::CREATE_PHOTOS_DELETE_TRIGGER =
503 "CREATE TRIGGER IF NOT EXISTS photos_delete_trigger AFTER UPDATE ON " +
504 PhotoColumn::PHOTOS_TABLE + " FOR EACH ROW WHEN new." + PhotoColumn::PHOTO_DIRTY +
505 " = " + std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_DELETED)) +
506 " AND OLD." + PhotoColumn::PHOTO_POSITION + " = 1 AND is_caller_self_func() = 'true'" +
507 " BEGIN DELETE FROM " + PhotoColumn::PHOTOS_TABLE +
508 " WHERE " + PhotoColumn::MEDIA_ID + " = old." + PhotoColumn::MEDIA_ID + ";" +
509 " END;";
510
511 const std::string PhotoColumn::CREATE_PHOTOS_FDIRTY_TRIGGER =
512 "CREATE TRIGGER IF NOT EXISTS photos_fdirty_trigger AFTER UPDATE ON " +
513 PhotoColumn::PHOTOS_TABLE + " FOR EACH ROW WHEN OLD.position <> 1 AND" +
514 " new.date_modified <> old.date_modified " +
515 " AND new.dirty = old.dirty AND is_caller_self_func() = 'true'" +
516 " BEGIN " +
517 " UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET dirty = " +
518 std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_FDIRTY)) +
519 " WHERE file_id = old.file_id;" +
520 " SELECT cloud_sync_func(); " +
521 " END;";
522
523 const std::string PhotoColumn::CREATE_PHOTOS_MDIRTY_TRIGGER =
524 "CREATE TRIGGER IF NOT EXISTS photos_mdirty_trigger AFTER UPDATE ON " +
525 PhotoColumn::PHOTOS_TABLE + " FOR EACH ROW WHEN OLD.position <> 1" +
526 " AND new.date_modified = old.date_modified AND ( old.dirty = " +
527 std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_SYNCED)) + " OR old.dirty =" +
528 std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_SDIRTY)) + " OR old.dirty =" +
529 std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_TDIRTY)) +
530 ") AND new.dirty = old.dirty AND is_caller_self_func() = 'true'" +
531 " AND " + PhotoColumn::CheckUploadPhotoColumns() +
532 " BEGIN " +
533 " UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET dirty = " +
534 std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_MDIRTY)) +
535 " WHERE file_id = old.file_id;" +
536 " SELECT cloud_sync_func(); " +
537 " END;";
538
539 const std::string PhotoColumn::INSERT_GENERATE_HIGHLIGHT_THUMBNAIL =
540 "CREATE TRIGGER IF NOT EXISTS insert_generate_highlight_thumbnail_trigger AFTER INSERT ON " +
541 PhotoColumn::HIGHLIGHT_TABLE + " BEGIN SELECT begin_generate_highlight_thumbnail " +
542 "(NEW." + MEDIA_DATA_DB_ID + ", NEW." + MEDIA_DATA_DB_VIDEO_TRACKS +
543 ", NEW." + MEDIA_DATA_DB_HIGHLIGHT_TRIGGER + ", '" + MEDIA_DATA_DB_INSERT_TYPE + "'); END;";
544
545 const std::string PhotoColumn::UPDATE_GENERATE_HIGHLIGHT_THUMBNAIL =
546 "CREATE TRIGGER IF NOT EXISTS update_generate_highlight_thumbnail_trigger AFTER UPDATE ON " +
547 PhotoColumn::HIGHLIGHT_TABLE + " FOR EACH ROW " + " WHEN OLD." +
548 MEDIA_DATA_DB_HIGHLIGHT_TRIGGER + "= 1 " + "AND NEW." + MEDIA_DATA_DB_HIGHLIGHT_TRIGGER +
549 "= 0 BEGIN SELECT begin_generate_highlight_thumbnail " +
550 "(NEW." + MEDIA_DATA_DB_ID + ", NEW." + MEDIA_DATA_DB_VIDEO_TRACKS +
551 ", NEW." + MEDIA_DATA_DB_HIGHLIGHT_TRIGGER + ", '" + MEDIA_DATA_DB_UPDATE_TYPE + "'); END;";
552
553 const std::string PhotoColumn::INDEX_HIGHLIGHT_FILEID =
554 BaseColumn::CreateIndex() + MEDIA_DATA_DB_HIGHLIGHT_INDEX + " ON " +
555 HIGHLIGHT_TABLE + " (" + MEDIA_ID + ");";
556
557 const std::string PhotoColumn::CREATE_PHOTOS_INSERT_CLOUD_SYNC =
558 " CREATE TRIGGER IF NOT EXISTS photo_insert_cloud_sync_trigger AFTER INSERT ON " +
559 PhotoColumn::PHOTOS_TABLE + " BEGIN SELECT cloud_sync_func(); END;";
560
561 const std::string PhotoColumn::CREATE_PHOTOS_UPDATE_CLOUD_SYNC =
562 " CREATE TRIGGER IF NOT EXISTS photo_update_cloud_sync_trigger AFTER UPDATE ON " +
563 PhotoColumn::PHOTOS_TABLE + " FOR EACH ROW WHEN OLD.dirty IN (1,2,3,5) AND new.dirty != " +
564 std::to_string(static_cast<int32_t>(DirtyTypes::TYPE_SYNCED)) +
565 " BEGIN SELECT cloud_sync_func(); END;";
566
567 const std::string PhotoColumn::UPDATE_READY_ON_THUMBNAIL_UPGRADE =
568 " UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET " + PhotoColumn::PHOTO_THUMBNAIL_READY +
569 " = 6 " + " WHERE " + PhotoColumn::PHOTO_THUMBNAIL_READY + " != 0; END;";
570
571 const std::string PhotoColumn::CREATE_PHOTOS_METADATA_DIRTY_TRIGGER =
572 "CREATE TRIGGER IF NOT EXISTS photos_metadata_dirty_trigger AFTER UPDATE ON " +
573 PhotoColumn::PHOTOS_TABLE + " FOR EACH ROW WHEN old." + PhotoColumn::PHOTO_POSITION + " != 2" +
574 " AND old.metadata_flags = " +
575 std::to_string(static_cast<int32_t>(MetadataFlags::TYPE_UPTODATE)) +
576 " AND new.metadata_flags = old.metadata_flags" +
577 " AND " + PhotoColumn::CheckMetaRecoveryPhotoColumns() +
578 " BEGIN " +
579 " UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET metadata_flags = " +
580 std::to_string(static_cast<int32_t>(MetadataFlags::TYPE_DIRTY)) +
581 " WHERE file_id = old.file_id;" +
582 " END;";
583
584 const std::string PhotoColumn::UPDATA_PHOTOS_DATA_UNIQUE = "CREATE UNIQUE INDEX IF NOT EXISTS photo_data_index ON " +
585 PhotoColumn::PHOTOS_TABLE + " (" + MEDIA_FILE_PATH + ");";
586
587 const std::string PhotoColumn::UPDATE_LCD_STATUS_NOT_UPLOADED =
588 " UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET " + PhotoColumn::PHOTO_LCD_VISIT_TIME +
589 " = 0 " + " WHERE " + PhotoColumn::PHOTO_DIRTY + " = 1; END;";
590
591 const std::set<std::string> PhotoColumn::PHOTO_COLUMNS = {
592 PhotoColumn::PHOTO_ORIENTATION, PhotoColumn::PHOTO_LATITUDE, PhotoColumn::PHOTO_LONGITUDE,
593 PhotoColumn::PHOTO_HEIGHT, PhotoColumn::PHOTO_WIDTH, PhotoColumn::PHOTO_LCD_VISIT_TIME, PhotoColumn::PHOTO_POSITION,
594 PhotoColumn::PHOTO_DIRTY, PhotoColumn::PHOTO_CLOUD_ID, PhotoColumn::CAMERA_SHOT_KEY, PhotoColumn::PHOTO_ALL_EXIF,
595 PhotoColumn::PHOTO_USER_COMMENT, PhotoColumn::PHOTO_DATE_YEAR, PhotoColumn::PHOTO_DATE_MONTH,
596 PhotoColumn::PHOTO_DATE_DAY, PhotoColumn::PHOTO_EDIT_TIME, PhotoColumn::PHOTO_CLEAN_FLAG,
597 PhotoColumn::PHOTO_SHOOTING_MODE, PhotoColumn::PHOTO_SHOOTING_MODE_TAG, PhotoColumn::PHOTO_THUMB_STATUS,
598 PhotoColumn::PHOTO_SUBTYPE, PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE, PhotoColumn::PHOTO_LCD_SIZE,
599 PhotoColumn::PHOTO_THUMB_SIZE, PhotoColumn::MOVING_PHOTO_EFFECT_MODE, PhotoColumn::PHOTO_FRONT_CAMERA,
600 PhotoColumn::PHOTO_BURST_COVER_LEVEL, PhotoColumn::PHOTO_BURST_KEY, PhotoColumn::PHOTO_COVER_POSITION,
601 PhotoColumn::PHOTO_THUMBNAIL_READY, PhotoColumn::PHOTO_ORIGINAL_SUBTYPE, PhotoColumn::PHOTO_DETAIL_TIME,
602 PhotoColumn::PHOTO_CE_AVAILABLE, PhotoColumn::PHOTO_OWNER_ALBUM_ID, PhotoColumn::SUPPORTED_WATERMARK_TYPE,
603 PhotoColumn::PHOTO_THUMBNAIL_VISIBLE, PhotoColumn::PHOTO_QUALITY, PhotoColumn::PHOTO_IS_AUTO,
604 PhotoColumn::PHOTO_MEDIA_SUFFIX, PhotoColumn::PHOTO_IS_RECENT_SHOW, PhotoColumn::PHOTO_IS_RECTIFICATION_COVER,
605 PhotoColumn::PHOTO_EXIF_ROTATE,
606 };
607
IsPhotoColumn(const std::string & columnName)608 bool PhotoColumn::IsPhotoColumn(const std::string &columnName)
609 {
610 if (columnName == MEDIA_COLUMN_COUNT) {
611 return true;
612 }
613 return (PHOTO_COLUMNS.find(columnName) != PHOTO_COLUMNS.end()) ||
614 (MEDIA_COLUMNS.find(columnName) != MEDIA_COLUMNS.end());
615 }
616
CheckUploadPhotoColumns()617 std::string PhotoColumn::CheckUploadPhotoColumns()
618 {
619 // Since date_modified has been checked in mdirty and fdirty, omit it here.
620 const std::vector<std::string> uploadPhotoColumns = {
621 MEDIA_FILE_PATH,
622 MEDIA_SIZE,
623 MEDIA_NAME,
624 MEDIA_TYPE,
625 MEDIA_MIME_TYPE,
626 MEDIA_OWNER_PACKAGE,
627 MEDIA_OWNER_APPID,
628 MEDIA_DEVICE_NAME,
629 MEDIA_DATE_ADDED,
630 MEDIA_DATE_TAKEN,
631 MEDIA_DURATION,
632 MEDIA_IS_FAV,
633 MEDIA_DATE_TRASHED,
634 MEDIA_DATE_DELETED,
635 MEDIA_HIDDEN,
636 PHOTO_META_DATE_MODIFIED,
637 PHOTO_ORIENTATION,
638 PHOTO_LATITUDE,
639 PHOTO_LONGITUDE,
640 PHOTO_HEIGHT,
641 PHOTO_WIDTH,
642 PHOTO_SUBTYPE,
643 PHOTO_USER_COMMENT,
644 PHOTO_DATE_YEAR,
645 PHOTO_DATE_MONTH,
646 PHOTO_DATE_DAY,
647 PHOTO_DETAIL_TIME,
648 PHOTO_SHOOTING_MODE,
649 PHOTO_SHOOTING_MODE_TAG,
650 PHOTO_OWNER_ALBUM_ID,
651 PHOTO_SOURCE_PATH,
652 MOVING_PHOTO_EFFECT_MODE,
653 PHOTO_COVER_POSITION,
654 PHOTO_ORIGINAL_SUBTYPE,
655 PHOTO_IS_RECTIFICATION_COVER,
656 };
657
658 std::string result = "(";
659 size_t size = uploadPhotoColumns.size();
660 for (size_t i = 0; i < size; i++) {
661 std::string column = uploadPhotoColumns[i];
662 if (i != size - 1) {
663 result += "new." + column + " <> old." + column + " OR ";
664 } else {
665 result += "new." + column + " <> old." + column + ")";
666 }
667 }
668 return result;
669 }
670
CheckMetaRecoveryPhotoColumns()671 std::string PhotoColumn::CheckMetaRecoveryPhotoColumns()
672 {
673 const std::vector<std::string> metaDirtyPhotoColumns = {
674 MEDIA_DATE_MODIFIED, MEDIA_FILE_PATH, MEDIA_SIZE, MEDIA_TYPE, MEDIA_MIME_TYPE, MEDIA_OWNER_PACKAGE,
675 MEDIA_OWNER_APPID, MEDIA_DEVICE_NAME, MEDIA_DATE_ADDED, MEDIA_DATE_TAKEN, MEDIA_DURATION, MEDIA_IS_FAV,
676 MEDIA_DATE_TRASHED, MEDIA_DATE_DELETED, MEDIA_HIDDEN, PHOTO_META_DATE_MODIFIED, PHOTO_ORIENTATION,
677 PHOTO_LATITUDE, PHOTO_LONGITUDE, PHOTO_HEIGHT, PHOTO_WIDTH, PHOTO_SUBTYPE, PHOTO_USER_COMMENT,
678 PHOTO_DATE_YEAR, PHOTO_DATE_MONTH, PHOTO_DATE_DAY, PHOTO_SHOOTING_MODE, PHOTO_SHOOTING_MODE_TAG,
679 PHOTO_OWNER_ALBUM_ID, PHOTO_SOURCE_PATH, MOVING_PHOTO_EFFECT_MODE, PHOTO_COVER_POSITION, PHOTO_ORIGINAL_SUBTYPE,
680 PHOTO_CLOUD_ID, PHOTO_POSITION, PHOTO_DIRTY, PHOTO_SYNC_STATUS, PHOTO_CLOUD_VERSION, PHOTO_CLEAN_FLAG,
681 };
682
683 std::string result = "(";
684 size_t size = metaDirtyPhotoColumns.size();
685 for (size_t i = 0; i < size; i++) {
686 std::string column = metaDirtyPhotoColumns[i];
687 if (i != size - 1) {
688 result += "new." + column + " <> old." + column + " OR ";
689 } else {
690 result += "new." + column + " <> old." + column + ")";
691 }
692 }
693 return result;
694 }
695
696 const std::string AudioColumn::AUDIO_ALBUM = "audio_album";
697 const std::string AudioColumn::AUDIO_ARTIST = "artist";
698
699 const std::string AudioColumn::AUDIOS_TABLE = "Audios";
700
701 const std::string AudioColumn::AUDIO_URI_PREFIX = "file://media/Audio/";
702 const std::string AudioColumn::DEFAULT_AUDIO_URI = "file://media/Audio";
703 const std::string AudioColumn::AUDIO_TYPE_URI = "/Audio";
704
705 const std::string AudioColumn::CREATE_AUDIO_TABLE = "CREATE TABLE IF NOT EXISTS " +
706 AUDIOS_TABLE + " (" +
707 MEDIA_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
708 MEDIA_FILE_PATH + " TEXT, " +
709 MEDIA_SIZE + " BIGINT, " +
710 MEDIA_TITLE + " TEXT, " +
711 MEDIA_NAME + " TEXT, " +
712 MEDIA_TYPE + " INT, " +
713 MEDIA_MIME_TYPE + " TEXT, " +
714 MEDIA_OWNER_PACKAGE + " TEXT, " +
715 MEDIA_OWNER_APPID + " TEXT, " +
716 MEDIA_PACKAGE_NAME + " TEXT, " +
717 MEDIA_DEVICE_NAME + " TEXT, " +
718 AUDIO_ARTIST + " TEXT, " +
719 MEDIA_DATE_ADDED + " BIGINT, " +
720 MEDIA_DATE_MODIFIED + " BIGINT, " +
721 MEDIA_DATE_TAKEN + " BIGINT DEFAULT 0, " +
722 MEDIA_DURATION + " INT, " +
723 MEDIA_TIME_PENDING + " BIGINT DEFAULT 0, " +
724 MEDIA_IS_FAV + " INT DEFAULT 0, " +
725 MEDIA_DATE_TRASHED + " BIGINT DEFAULT 0, " +
726 MEDIA_DATE_DELETED + " BIGINT DEFAULT 0, " +
727 MEDIA_PARENT_ID + " INT DEFAULT 0, " +
728 MEDIA_RELATIVE_PATH + " TEXT, " +
729 MEDIA_VIRTURL_PATH + " TEXT UNIQUE, " +
730 AUDIO_ALBUM + " TEXT)";
731
732 const std::string AudioColumn::QUERY_MEDIA_VOLUME = "SELECT sum(" + MediaColumn::MEDIA_SIZE + ") AS " +
733 MediaColumn::MEDIA_SIZE + "," +
734 MediaColumn::MEDIA_TYPE + " FROM " +
735 AudioColumn::AUDIOS_TABLE + " WHERE " +
736 MediaColumn::MEDIA_TYPE + " = " + std::to_string(MEDIA_TYPE_AUDIO) + " GROUP BY " +
737 MediaColumn::MEDIA_TYPE;
738
739 const std::set<std::string> AudioColumn::AUDIO_COLUMNS = {
740 AudioColumn::AUDIO_ALBUM, AudioColumn::AUDIO_ARTIST
741 };
742
IsAudioColumn(const std::string & columnName)743 bool AudioColumn::IsAudioColumn(const std::string &columnName)
744 {
745 return (AUDIO_COLUMNS.find(columnName) != AUDIO_COLUMNS.end()) ||
746 (MEDIA_COLUMNS.find(columnName) != MEDIA_COLUMNS.end());
747 }
748
749 const std::string MediaColumn::ASSETS_QUERY_FILTER =
750 PhotoColumn::PHOTO_SYNC_STATUS + " = 0" + " AND " +
751 MediaColumn::MEDIA_DATE_TRASHED + " = 0" + " AND " +
752 MediaColumn::MEDIA_HIDDEN + " = 0" + " AND " +
753 MediaColumn::MEDIA_TIME_PENDING + " = 0 ";
754
755 const std::string PhotoExtColumn::PHOTOS_EXT_TABLE = "tab_photos_ext";
756
757 const std::string PhotoExtColumn::PHOTO_ID = "photo_id";
758 const std::string PhotoExtColumn::THUMBNAIL_SIZE = "thumbnail_size";
759 const std::string PhotoExtColumn::EDITDATA_SIZE = "editdata_size";
760
761 const std::string PhotoExtColumn::CREATE_PHOTO_EXT_TABLE =
762 "CREATE TABLE IF NOT EXISTS " +
763 PHOTOS_EXT_TABLE + " (" +
764 PHOTO_ID + " INTEGER PRIMARY KEY, " +
765 THUMBNAIL_SIZE + " BIGINT DEFAULT 0)";
766
767 // For Photos table query filter
768 const std::string PhotoColumn::PHOTOS_QUERY_FILTER =
769 MediaColumn::MEDIA_DATE_TRASHED + " = 0" + " AND " +
770 MediaColumn::MEDIA_HIDDEN + " = 0" + " AND " +
771 MediaColumn::MEDIA_TIME_PENDING + " = 0" + " AND " +
772 PhotoColumn::PHOTO_IS_TEMP + " = 0" + " AND " +
773 PhotoColumn::PHOTO_BURST_COVER_LEVEL + " = 1 ";
774
775 } // namespace Media
776 } // namespace OHOS
777