• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-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 #ifndef INTERFACES_INNERKITS_NATIVE_INCLUDE_MEDIA_DATA_ABILITY_CONST_H_
17 #define INTERFACES_INNERKITS_NATIVE_INCLUDE_MEDIA_DATA_ABILITY_CONST_H_
18 
19 #include "medialibrary_type_const.h"
20 #include "media_column.h"
21 #include "userfilemgr_uri.h"
22 
23 namespace OHOS {
24 namespace Media {
25 const int32_t MEDIA_RDB_VERSION = 15;
26 enum {
27     VERSION_ADD_CLOUD = 2,
28     VERSION_ADD_META_MODIFED = 3,
29     VERSION_MODIFY_SYNC_STATUS = 4,
30     VERSION_ADD_API10_TABLE = 5,
31     VERSION_MODIFY_DELETE_TRIGGER = 6,
32     VERSION_ADD_CLOUD_VERSION = 7,
33     VERSION_UPDATE_CLOUD_PATH = 8,
34     VERSION_UPDATE_API10_TABLE = 9,
35     VERSION_ADD_TABLE_TYPE = 10,
36     VERSION_ADD_PACKAGE_NAME = 11,
37     VERSION_ADD_CLOUD_ALBUM = 12,
38     VERSION_ADD_CAMERA_SHOT_KEY = 13,
39     /**
40      * Remove album count triggers for batch operation performance,
41      * update PhotoAlbum.count by a query and an update(in a single transaction of course)
42      * if number of assets in an album changes.
43      */
44     VERSION_REMOVE_ALBUM_COUNT_TRIGGER = 14,
45     VERSION_ADD_ALL_EXIF = 15,
46 };
47 
48 enum {
49     MEDIA_API_VERSION_DEFAULT = 8,
50     MEDIA_API_VERSION_V9,
51     MEDIA_API_VERSION_V10,
52 };
53 
54 const std::string MEDIA_LIBRARY_VERSION = "1.0";
55 
56 const int32_t DEVICE_SYNCSTATUSING = 0;
57 const int32_t DEVICE_SYNCSTATUS_COMPLETE = 1;
58 
59 const std::string MEDIA_DATA_DEVICE_PATH = "local";
60 const std::string MEDIALIBRARY_TABLE = "Files";
61 const std::string SMARTALBUM_TABLE = "SmartAlbum";
62 const std::string SMARTALBUM_MAP_TABLE = "SmartMap";
63 const std::string CATEGORY_SMARTALBUM_MAP_TABLE = "CategorySmartAlbumMap";
64 const std::string MEDIATYPE_DIRECTORY_TABLE = "MediaTypeDirectory";
65 const std::string DEVICE_TABLE = "Device";
66 const std::string BUNDLE_PERMISSION_TABLE = "BundlePermission";
67 const std::string MEDIA_DATA_ABILITY_DB_NAME = "media_library.db";
68 
69 const std::string BUNDLE_NAME = "com.ohos.medialibrary.medialibrarydata";
70 
71 const std::string ML_FILE_SCHEME = "file";
72 const std::string ML_FILE_PREFIX = "file://";
73 const std::string ML_FILE_URI_PREFIX = "file://media";
74 const std::string ML_URI_NETWORKID = "networkid";
75 const std::string ML_URI_NETWORKID_EQUAL = "?networkid=";
76 const std::string ML_URI_AUTHORITY = "media";
77 const std::string ML_DATA_SHARE_SCHEME = "datashare";
78 const std::string MEDIALIBRARY_DATA_ABILITY_PREFIX = "datashare://";
79 const std::string MEDIALIBRARY_DATA_URI_IDENTIFIER = "/media";
80 const std::string MEDIALIBRARY_MEDIA_PREFIX = MEDIALIBRARY_DATA_ABILITY_PREFIX +
81                                                      MEDIALIBRARY_DATA_URI_IDENTIFIER;
82 const std::string MEDIALIBRARY_TYPE_AUDIO_URI = "/audio";
83 const std::string MEDIALIBRARY_TYPE_VIDEO_URI = "/video";
84 const std::string MEDIALIBRARY_TYPE_IMAGE_URI = "/image";
85 const std::string MEDIALIBRARY_TYPE_FILE_URI  =  "/file";
86 const std::string MEDIALIBRARY_TYPE_ALBUM_URI  =  "/album";
87 const std::string MEDIALIBRARY_TYPE_SMARTALBUM_CHANGE_URI  =  "/smartalbum";
88 const std::string MEDIALIBRARY_TYPE_DEVICE_URI  =  "/device";
89 const std::string MEDIALIBRARY_TYPE_SMART_URI = "/smart";
90 
91 const std::string AUDIO_URI_PREFIX = ML_FILE_URI_PREFIX + MEDIALIBRARY_TYPE_AUDIO_URI;
92 const std::string VIDEO_URI_PREFIX = ML_FILE_URI_PREFIX + MEDIALIBRARY_TYPE_VIDEO_URI;
93 const std::string IMAGE_URI_PREFIX = ML_FILE_URI_PREFIX + MEDIALIBRARY_TYPE_IMAGE_URI;
94 const std::string FILE_URI_PREFIX = ML_FILE_URI_PREFIX + MEDIALIBRARY_TYPE_FILE_URI;
95 const std::string ALBUM_URI_PREFIX = ML_FILE_URI_PREFIX + MEDIALIBRARY_TYPE_ALBUM_URI;
96 
97 const std::string URI_TYPE_PHOTO = "Photo";
98 const std::string URI_TYPE_AUDIO_V10 = "Audio";
99 const std::string URI_TYPE_PHOTO_ALBUM = "PhotoAlbum";
100 constexpr int64_t AGING_TIME = static_cast<const int64_t>(30 * 60 * 60 * 24);
101 
102 const std::string MEDIALIBRARY_SMARTALBUM_URI = MEDIALIBRARY_DATA_URI + "/" + SMARTALBUM_TABLE;
103 const std::string MEDIALIBRARY_SMARTALBUM_MAP_URI = MEDIALIBRARY_DATA_URI + "/" + SMARTALBUM_MAP_TABLE;
104 const std::string MEDIALIBRARY_CATEGORY_SMARTALBUM_MAP_URI = MEDIALIBRARY_DATA_URI + "/"
105                                                              + CATEGORY_SMARTALBUM_MAP_TABLE;
106 const std::string MEDIALIBRARY_DIRECTORY_URI = MEDIALIBRARY_DATA_URI + "/" + MEDIATYPE_DIRECTORY_TABLE;
107 const std::string MEDIALIBRARY_BUNDLEPERM_URI = MEDIALIBRARY_DATA_URI + "/" + BUNDLE_PERMISSION_INSERT;
108 
109 const std::string MEDIALIBRARY_AUDIO_URI = MEDIALIBRARY_DATA_URI + '/' + "audio";
110 const std::string MEDIALIBRARY_VIDEO_URI = MEDIALIBRARY_DATA_URI + '/' + "video";
111 const std::string MEDIALIBRARY_IMAGE_URI = MEDIALIBRARY_DATA_URI + '/' + "image";
112 const std::string MEDIALIBRARY_FILE_URI  =  MEDIALIBRARY_DATA_URI + '/' + "file";
113 const std::string MEDIALIBRARY_ALBUM_URI  =  MEDIALIBRARY_DATA_URI + '/' + "album";
114 const std::string MEDIALIBRARY_SMARTALBUM_CHANGE_URI  =  MEDIALIBRARY_DATA_URI + '/' + "smartalbum";
115 const std::string MEDIALIBRARY_DEVICE_URI  =  MEDIALIBRARY_DATA_URI + '/' + "device";
116 const std::string MEDIALIBRARY_SMART_URI = MEDIALIBRARY_DATA_URI + '/' + "smart";
117 const std::string MEDIALIBRARY_REMOTEFILE_URI = MEDIALIBRARY_DATA_URI + '/' + "remotfile";
118 
119 const std::string MEDIA_DATA_DB_ID = "file_id";
120 const std::string MEDIA_DATA_DB_URI = "uri";
121 const std::string MEDIA_DATA_DB_FILE_PATH = "data";
122 const std::string MEDIA_DATA_DB_SIZE = "size";
123 const std::string MEDIA_DATA_DB_PARENT_ID = "parent";
124 const std::string MEDIA_DATA_DB_DATE_MODIFIED = "date_modified";
125 const std::string MEDIA_DATA_DB_DATE_ADDED = "date_added";
126 const std::string MEDIA_DATA_DB_MIME_TYPE = "mime_type";
127 const std::string MEDIA_DATA_DB_TITLE = "title";
128 const std::string MEDIA_DATA_DB_DESCRIPTION = "description";
129 const std::string MEDIA_DATA_DB_NAME = "display_name";
130 const std::string MEDIA_DATA_DB_ORIENTATION = "orientation";
131 const std::string MEDIA_DATA_DB_LATITUDE = "latitude";
132 const std::string MEDIA_DATA_DB_LONGITUDE = "longitude";
133 const std::string MEDIA_DATA_DB_DATE_TAKEN = "date_taken";
134 const std::string MEDIA_DATA_DB_THUMBNAIL = "thumbnail";
135 const std::string MEDIA_DATA_DB_CONTENT_CREATE_TIME = "content_create_time";
136 const std::string MEDIA_DATA_DB_POSITION = "position";
137 const std::string MEDIA_DATA_DB_DIRTY = "dirty";
138 const std::string MEDIA_DATA_DB_CLOUD_ID = "cloud_id";
139 const std::string MEDIA_DATA_DB_META_DATE_MODIFIED = "meta_date_modified";
140 const std::string MEDIA_DATA_DB_SYNC_STATUS = "sync_status";
141 
142 const std::string MEDIA_DATA_DB_LCD = "lcd";
143 const std::string MEDIA_DATA_DB_TIME_VISIT = "time_visit";
144 const std::string MEDIA_DATA_DB_BUCKET_ID = "bucket_id";
145 const std::string MEDIA_DATA_DB_BUCKET_NAME = "bucket_display_name";
146 const std::string MEDIA_DATA_DB_DURATION = "duration";
147 const std::string MEDIA_DATA_DB_ARTIST = "artist";
148 
149 const std::string MEDIA_DATA_DB_AUDIO_ALBUM = "audio_album";
150 const std::string MEDIA_DATA_DB_MEDIA_TYPE = "media_type";
151 
152 const std::string MEDIA_DATA_DB_HEIGHT = "height";
153 const std::string MEDIA_DATA_DB_WIDTH = "width";
154 const std::string MEDIA_DATA_DB_OWNER_PACKAGE = "owner_package";
155 const std::string MEDIA_DATA_DB_PACKAGE_NAME = "package_name";
156 
157 const std::string MEDIA_DATA_DB_IS_FAV = "is_favorite";
158 const std::string MEDIA_DATA_DB_IS_TRASH = "is_trash";
159 const std::string MEDIA_DATA_DB_RECYCLE_PATH = "recycle_path";
160 const std::string MEDIA_DATA_DB_DATE_TRASHED = "date_trashed";
161 const std::string MEDIA_DATA_DB_IS_PENDING = "is_pending";
162 const std::string MEDIA_DATA_DB_TIME_PENDING = "time_pending";
163 const std::string MEDIA_DATA_DB_RELATIVE_PATH = "relative_path";
164 const std::string MEDIA_DATA_DB_VOLUME_NAME = "volume_name";
165 const std::string MEDIA_DATA_DB_SELF_ID = "self_id";
166 const std::string MEDIA_DATA_DB_DEVICE_NAME = "device_name";
167 
168 const std::string MEDIA_DATA_DB_ALBUM = "album";
169 const std::string MEDIA_DATA_DB_ALBUM_ID = "album_id";
170 const std::string MEDIA_DATA_DB_ALBUM_NAME = "album_name";
171 const std::string MEDIA_DATA_DB_COUNT = "count";
172 const std::string MEDIA_DATA_BUNDLENAME = "bundle_name";
173 // ringtone uri constants
174 const std::string MEDIA_DATA_DB_RINGTONE_URI = "ringtone_uri";
175 const std::string MEDIA_DATA_DB_ALARM_URI = "alarm_uri";
176 const std::string MEDIA_DATA_DB_NOTIFICATION_URI = "notification_uri";
177 const std::string MEDIA_DATA_DB_RINGTONE_TYPE = "ringtone_type";
178 
179 const std::string MEDIA_DATA_IMAGE_BITS_PER_SAMPLE = "BitsPerSample";
180 const std::string MEDIA_DATA_IMAGE_ORIENTATION = "Orientation";
181 const std::string MEDIA_DATA_IMAGE_IMAGE_LENGTH = "ImageLength";
182 const std::string MEDIA_DATA_IMAGE_IMAGE_WIDTH = "ImageWidth";
183 const std::string MEDIA_DATA_IMAGE_GPS_LATITUDE = "GPSLatitude";
184 const std::string MEDIA_DATA_IMAGE_GPS_LONGITUDE = "GPSLongitude";
185 const std::string MEDIA_DATA_IMAGE_GPS_LATITUDE_REF = "GPSLatitudeRef";
186 const std::string MEDIA_DATA_IMAGE_GPS_LONGITUDE_REF = "GPSLongitudeRef";
187 const std::string MEDIA_DATA_IMAGE_DATE_TIME_ORIGINAL = "DateTimeOriginalForMedia";
188 const std::string MEDIA_DATA_IMAGE_EXPOSURE_TIME = "ExposureTime";
189 const std::string MEDIA_DATA_IMAGE_F_NUMBER = "FNumber";
190 const std::string MEDIA_DATA_IMAGE_ISO_SPEED_RATINGS = "ISOSpeedRatings";
191 const std::string MEDIA_DATA_IMAGE_SCENE_TYPE = "SceneType";
192 
193 const std::string MEDIA_COLUMN_COUNT = "count(*)";
194 
195 const std::string PHOTO_INDEX = "photo_index";
196 
197 const std::string PERMISSION_ID = "id";
198 const std::string PERMISSION_BUNDLE_NAME = "bundle_name";
199 const std::string PERMISSION_FILE_ID = "file_id";
200 const std::string PERMISSION_MODE = "mode";
201 const std::string PERMISSION_TABLE_TYPE = "table_type";
202 
203 const std::string CREATE_MEDIA_TABLE = "CREATE TABLE IF NOT EXISTS " + MEDIALIBRARY_TABLE + " (" +
204                                        MEDIA_DATA_DB_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
205                                        MEDIA_DATA_DB_FILE_PATH + " TEXT, " +
206                                        MEDIA_DATA_DB_SIZE + " BIGINT, " +
207                                        MEDIA_DATA_DB_PARENT_ID + " INT DEFAULT 0, " +
208                                        MEDIA_DATA_DB_DATE_ADDED + " BIGINT, " +
209                                        MEDIA_DATA_DB_DATE_MODIFIED + " BIGINT, " +
210                                        MEDIA_DATA_DB_MIME_TYPE + " TEXT, " +
211                                        MEDIA_DATA_DB_TITLE + " TEXT, " +
212                                        MEDIA_DATA_DB_DESCRIPTION + " TEXT, " +
213                                        MEDIA_DATA_DB_NAME + " TEXT, " +
214                                        MEDIA_DATA_DB_ORIENTATION + " INT DEFAULT 0, " +
215                                        MEDIA_DATA_DB_LATITUDE + " DOUBLE DEFAULT 0, " +
216                                        MEDIA_DATA_DB_LONGITUDE + " DOUBLE DEFAULT 0, " +
217                                        MEDIA_DATA_DB_DATE_TAKEN + " BIGINT DEFAULT 0, " +
218                                        MEDIA_DATA_DB_THUMBNAIL + " TEXT, " +
219                                        MEDIA_DATA_DB_LCD + " TEXT, " +
220                                        MEDIA_DATA_DB_TIME_VISIT + " BIGINT DEFAULT 0, " +
221                                        MEDIA_DATA_DB_BUCKET_ID + " INT DEFAULT 0, " +
222                                        MEDIA_DATA_DB_BUCKET_NAME + " TEXT, " +
223                                        MEDIA_DATA_DB_DURATION + " INT, " +
224                                        MEDIA_DATA_DB_ARTIST + " TEXT, " +
225                                        MEDIA_DATA_DB_AUDIO_ALBUM + " TEXT, " +
226                                        MEDIA_DATA_DB_MEDIA_TYPE + " INT, " +
227                                        MEDIA_DATA_DB_HEIGHT + " INT, " +
228                                        MEDIA_DATA_DB_WIDTH + " INT, " +
229                                        MEDIA_DATA_DB_IS_TRASH + " INT DEFAULT 0, " +
230                                        MEDIA_DATA_DB_RECYCLE_PATH + " TEXT, " +
231                                        MEDIA_DATA_DB_IS_FAV + " BOOL DEFAULT 0, " +
232                                        MEDIA_DATA_DB_OWNER_PACKAGE + " TEXT, " +
233                                        MEDIA_DATA_DB_PACKAGE_NAME + " TEXT, " +
234                                        MEDIA_DATA_DB_DEVICE_NAME + " TEXT, " +
235                                        MEDIA_DATA_DB_IS_PENDING + " BOOL DEFAULT 0, " +
236                                        MEDIA_DATA_DB_TIME_PENDING + " BIGINT DEFAULT 0, " +
237                                        MEDIA_DATA_DB_DATE_TRASHED + " BIGINT DEFAULT 0, " +
238                                        MEDIA_DATA_DB_RELATIVE_PATH + " TEXT, " +
239                                        MEDIA_DATA_DB_VOLUME_NAME + " TEXT, " +
240                                        MEDIA_DATA_DB_SELF_ID + " TEXT DEFAULT '1', " +
241                                        MEDIA_DATA_DB_ALBUM_NAME + " TEXT, " +
242                                        MEDIA_DATA_DB_URI + " TEXT, " +
243                                        MEDIA_DATA_DB_ALBUM + " TEXT, " +
244                                        MEDIA_DATA_DB_CLOUD_ID + " TEXT, " +
245                                        MEDIA_DATA_DB_DIRTY + " INT DEFAULT 1, " +
246                                        MEDIA_DATA_DB_POSITION + " INT DEFAULT 1, " +
247                                        MEDIA_DATA_DB_META_DATE_MODIFIED + "  BIGINT DEFAULT 0, " +
248                                        MEDIA_DATA_DB_SYNC_STATUS + " INT DEFAULT 0)";
249 
250 const std::string CREATE_BUNDLE_PREMISSION_TABLE = "CREATE TABLE IF NOT EXISTS " +
251                                       BUNDLE_PERMISSION_TABLE + " (" +
252                                       PERMISSION_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
253                                       PERMISSION_BUNDLE_NAME + " TEXT NOT NULL, " +
254                                       PERMISSION_FILE_ID + " INT NOT NULL, " +
255                                       PERMISSION_MODE + " TEXT NOT NULL, " +
256                                       PERMISSION_TABLE_TYPE + " INT )";
257 
258 const std::string CREATE_IMAGE_VIEW = "CREATE VIEW IF NOT EXISTS Image AS SELECT " +
259                                       MEDIA_DATA_DB_ID + ", " +
260                                       MEDIA_DATA_DB_FILE_PATH + ", " +
261                                       MEDIA_DATA_DB_SIZE + ", " +
262                                       MEDIA_DATA_DB_NAME + ", " +
263                                       MEDIA_DATA_DB_TITLE + ", " +
264                                       MEDIA_DATA_DB_DESCRIPTION + ", " +
265                                       MEDIA_DATA_DB_DATE_ADDED + ", " +
266                                       MEDIA_DATA_DB_DATE_MODIFIED + ", " +
267                                       MEDIA_DATA_DB_DATE_TAKEN + ", " +
268                                       MEDIA_DATA_DB_MIME_TYPE + ", " +
269                                       MEDIA_DATA_DB_LATITUDE + ", " +
270                                       MEDIA_DATA_DB_LONGITUDE + ", " +
271                                       MEDIA_DATA_DB_ORIENTATION + ", " +
272                                       MEDIA_DATA_DB_WIDTH + ", " +
273                                       MEDIA_DATA_DB_HEIGHT + ", " +
274                                       MEDIA_DATA_DB_BUCKET_ID + ", " +
275                                       MEDIA_DATA_DB_BUCKET_NAME + ", " +
276                                       MEDIA_DATA_DB_THUMBNAIL + ", " +
277                                       MEDIA_DATA_DB_LCD + ", " +
278                                       MEDIA_DATA_DB_SELF_ID + " " +
279                                       "FROM " + MEDIALIBRARY_TABLE + " WHERE " +
280                                       MEDIA_DATA_DB_MEDIA_TYPE + " = 3";
281 
282 const std::string CREATE_VIDEO_VIEW = "CREATE VIEW IF NOT EXISTS Video AS SELECT " +
283                                       MEDIA_DATA_DB_ID + ", " +
284                                       MEDIA_DATA_DB_FILE_PATH + ", " +
285                                       MEDIA_DATA_DB_SIZE + ", " +
286                                       MEDIA_DATA_DB_NAME + ", " +
287                                       MEDIA_DATA_DB_TITLE + ", " +
288                                       MEDIA_DATA_DB_DESCRIPTION + ", " +
289                                       MEDIA_DATA_DB_DATE_ADDED + ", " +
290                                       MEDIA_DATA_DB_DATE_MODIFIED + ", " +
291                                       MEDIA_DATA_DB_MIME_TYPE + ", " +
292                                       MEDIA_DATA_DB_ORIENTATION + ", " +
293                                       MEDIA_DATA_DB_WIDTH + ", " +
294                                       MEDIA_DATA_DB_HEIGHT + ", " +
295                                       MEDIA_DATA_DB_DURATION + ", " +
296                                       MEDIA_DATA_DB_BUCKET_ID + ", " +
297                                       MEDIA_DATA_DB_BUCKET_NAME + ", " +
298                                       MEDIA_DATA_DB_THUMBNAIL + ", " +
299                                       MEDIA_DATA_DB_SELF_ID + " " +
300                                       "FROM " + MEDIALIBRARY_TABLE + " WHERE " +
301                                       MEDIA_DATA_DB_MEDIA_TYPE + " = 4";
302 
303 const std::string CREATE_AUDIO_VIEW = "CREATE VIEW IF NOT EXISTS Audio AS SELECT " +
304                                       MEDIA_DATA_DB_ID + ", " +
305                                       MEDIA_DATA_DB_FILE_PATH + ", " +
306                                       MEDIA_DATA_DB_SIZE + ", " +
307                                       MEDIA_DATA_DB_NAME + ", " +
308                                       MEDIA_DATA_DB_TITLE + ", " +
309                                       MEDIA_DATA_DB_DESCRIPTION + ", " +
310                                       MEDIA_DATA_DB_DATE_ADDED + ", " +
311                                       MEDIA_DATA_DB_DATE_MODIFIED + ", " +
312                                       MEDIA_DATA_DB_MIME_TYPE + ", " +
313                                       MEDIA_DATA_DB_ARTIST + ", " +
314                                       MEDIA_DATA_DB_DURATION + ", " +
315                                       MEDIA_DATA_DB_BUCKET_ID + ", " +
316                                       MEDIA_DATA_DB_BUCKET_NAME + ", " +
317                                       MEDIA_DATA_DB_THUMBNAIL + ", " +
318                                       MEDIA_DATA_DB_SELF_ID + " " +
319                                       "FROM " + MEDIALIBRARY_TABLE + " WHERE " +
320                                       MEDIA_DATA_DB_MEDIA_TYPE + " = 5";
321 
322 const std::string REMOTE_THUMBNAIL_TABLE = "RemoteThumbnailMap";
323 const std::string REMOTE_THUMBNAIL_DB_ID = "id";
324 const std::string REMOTE_THUMBNAIL_DB_FILE_ID = MEDIA_DATA_DB_ID;
325 const std::string REMOTE_THUMBNAIL_DB_UDID = "udid";
326 const std::string CREATE_REMOTE_THUMBNAIL_TABLE = "CREATE TABLE IF NOT EXISTS " + REMOTE_THUMBNAIL_TABLE + " (" +
327                                             REMOTE_THUMBNAIL_DB_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
328                                             REMOTE_THUMBNAIL_DB_FILE_ID + " INT, " +
329                                             REMOTE_THUMBNAIL_DB_UDID + " TEXT, " +
330                                             MEDIA_DATA_DB_THUMBNAIL + " TEXT, " +
331                                             MEDIA_DATA_DB_LCD + " TEXT, " +
332                                             MEDIA_DATA_DB_TIME_VISIT + " BIGINT DEFAULT 0) ";
333 const std::string FILE_TABLE = "file";
334 const std::string ALBUM_TABLE = "album";
335 const std::string ALBUM_VIEW_NAME = "Album";
336 const std::string DISTRIBUTED_ALBUM_COLUMNS = "SELECT count( " + FILE_TABLE + "." +
337                                               MEDIA_DATA_DB_DATE_TRASHED + " = 0 OR NULL) AS " +
338                                               MEDIA_DATA_DB_COUNT + ", " +
339                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_RELATIVE_PATH + ", " +
340                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_ID + " AS " +
341                                               MEDIA_DATA_DB_BUCKET_ID + ", " +
342                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_FILE_PATH + ", " +
343                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_TITLE + " AS " +
344                                               MEDIA_DATA_DB_BUCKET_NAME + ", " +
345                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_TITLE + ", " +
346                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_DESCRIPTION + ", " +
347                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_DATE_ADDED + ", " +
348                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_DATE_MODIFIED + ", " +
349                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_THUMBNAIL + ", " +
350                                               FILE_TABLE + "." + MEDIA_DATA_DB_MEDIA_TYPE + ", " +
351                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_SELF_ID + ", " +
352                                               ALBUM_TABLE + "." + MEDIA_DATA_DB_IS_TRASH;
353 const std::string DISTRIBUTED_ALBUM_WHERE_AND_GROUPBY = " WHERE " +
354                                                         FILE_TABLE + "." + MEDIA_DATA_DB_BUCKET_ID + " = " +
355                                                         ALBUM_TABLE + "." + MEDIA_DATA_DB_ID + " AND " +
356                                                         FILE_TABLE + "." + MEDIA_DATA_DB_MEDIA_TYPE + " <> " +
357                                                         std::to_string(MEDIA_TYPE_ALBUM) + " AND " +
358                                                         FILE_TABLE + "." + MEDIA_DATA_DB_MEDIA_TYPE + " <> " +
359                                                         std::to_string(MEDIA_TYPE_FILE) +
360                                                         " GROUP BY " +
361                                                         FILE_TABLE + "." + MEDIA_DATA_DB_BUCKET_ID +", " +
362                                                         FILE_TABLE + "." + MEDIA_DATA_DB_BUCKET_NAME + ", " +
363                                                         FILE_TABLE + "." + MEDIA_DATA_DB_MEDIA_TYPE + ", " +
364                                                         ALBUM_TABLE + "." + MEDIA_DATA_DB_SELF_ID;
365 const std::string CREATE_ALBUM_VIEW = "CREATE VIEW IF NOT EXISTS " + ALBUM_VIEW_NAME +
366                                       " AS " + DISTRIBUTED_ALBUM_COLUMNS +
367                                       " FROM " + MEDIALIBRARY_TABLE + " " + FILE_TABLE + ", " +
368                                       MEDIALIBRARY_TABLE + " " + ALBUM_TABLE +
369                                       DISTRIBUTED_ALBUM_WHERE_AND_GROUPBY;
370 const std::string SMARTALBUM_DB_ID = "album_id";
371 const std::string SMARTALBUM_DB_ALBUM_TYPE = "album_type";
372 const std::string SMARTALBUM_DB_NAME = "album_name";
373 const std::string SMARTALBUM_DB_DESCRIPTION = "description";
374 const std::string SMARTALBUM_DB_CAPACITY = "capacity";
375 const std::string SMARTALBUM_DB_LATITUDE = "latitude";
376 const std::string SMARTALBUM_DB_LONGITUDE = "longitude";
377 const std::string SMARTALBUM_DB_COVER_URI = "cover_uri";
378 const std::string SMARTALBUM_DB_EXPIRED_TIME = "expired_id";
379 const std::string SMARTALBUM_DB_SELF_ID = "self_id";
380 const std::string CREATE_SMARTALBUM_TABLE = "CREATE TABLE IF NOT EXISTS " + SMARTALBUM_TABLE + " (" +
381                                             SMARTALBUM_DB_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
382                                             SMARTALBUM_DB_NAME + " TEXT, " +
383                                             SMARTALBUM_DB_DESCRIPTION + " TEXT, " +
384                                             SMARTALBUM_DB_ALBUM_TYPE + " INT, " +
385                                             SMARTALBUM_DB_CAPACITY + " INT, " +
386                                             SMARTALBUM_DB_LATITUDE + " DOUBLE DEFAULT 0, " +
387                                             SMARTALBUM_DB_LONGITUDE + " DOUBLE DEFAULT 0, " +
388                                             SMARTALBUM_DB_COVER_URI + " TEXT, " +
389                                             SMARTALBUM_DB_EXPIRED_TIME + " INT DEFAULT 30, " +
390                                             SMARTALBUM_DB_SELF_ID + " TEXT) ";
391 
392 const std::string SMARTALBUMMAP_DB_ID = "map_id";
393 const std::string SMARTALBUMMAP_DB_ALBUM_ID = "album_id";
394 const std::string SMARTALBUMMAP_DB_CHILD_ALBUM_ID = "child_album_id";
395 const std::string SMARTALBUMMAP_DB_CHILD_ASSET_ID = "child_asset_id";
396 const std::string SMARTALBUMMAP_DB_SELF_ID = "self_id";
397 const std::string CREATE_SMARTALBUMMAP_TABLE = "CREATE TABLE IF NOT EXISTS " + SMARTALBUM_MAP_TABLE + " (" +
398                                             SMARTALBUMMAP_DB_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
399                                             SMARTALBUMMAP_DB_ALBUM_ID + " INT, " +
400                                             SMARTALBUMMAP_DB_CHILD_ALBUM_ID + " INT, " +
401                                             SMARTALBUMMAP_DB_CHILD_ASSET_ID + " INT, " +
402                                             SMARTALBUMMAP_DB_SELF_ID + " TEXT) ";
403 const std::string CATEGORY_SMARTALBUMMAP_DB_ID = "category_map_id";
404 const std::string CATEGORY_SMARTALBUMMAP_DB_CATEGORY_ID = "category_id";
405 const std::string CATEGORY_SMARTALBUMMAP_DB_CATEGORY_NAME = "category_name";
406 const std::string CATEGORY_SMARTALBUMMAP_DB_ALBUM_ID = "album_id";
407 const std::string CATEGORY_SMARTALBUMMAP_DB_SELF_ID = "self_id";
408 const std::string CREATE_CATEGORY_SMARTALBUMMAP_TABLE = "CREATE TABLE IF NOT EXISTS " +
409                                             CATEGORY_SMARTALBUM_MAP_TABLE + " (" +
410                                             CATEGORY_SMARTALBUMMAP_DB_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
411                                             CATEGORY_SMARTALBUMMAP_DB_CATEGORY_ID + " INT, " +
412                                             CATEGORY_SMARTALBUMMAP_DB_CATEGORY_NAME + " TEXT, " +
413                                             CATEGORY_SMARTALBUMMAP_DB_ALBUM_ID + " INT, " +
414                                             SMARTALBUMMAP_DB_SELF_ID + " TEXT) ";
415 const std::string DIRECTORY_DB_DIRECTORY_TYPE = "directory_type";
416 const std::string DIRECTORY_DB_MEDIA_TYPE = "media_type";
417 const std::string DIRECTORY_DB_DIRECTORY = "directory";
418 const std::string DIRECTORY_DB_EXTENSION = "extension";
419 const std::string CREATE_MEDIATYPE_DIRECTORY_TABLE = "CREATE TABLE IF NOT EXISTS " +
420                                             MEDIATYPE_DIRECTORY_TABLE + " (" +
421                                             DIRECTORY_DB_DIRECTORY_TYPE + " INTEGER PRIMARY KEY, " +
422                                             DIRECTORY_DB_MEDIA_TYPE + " TEXT, " +
423                                             DIRECTORY_DB_DIRECTORY + " TEXT, " +
424                                             DIRECTORY_DB_EXTENSION + " TEXT) ";
425 
426 const std::string DEVICE_DB_ID = "id";
427 const std::string DEVICE_DB_UDID = "device_udid";
428 const std::string DEVICE_DB_NETWORK_ID = "network_id";
429 const std::string DEVICE_DB_NAME = "device_name";
430 const std::string DEVICE_DB_IP = "device_ip";
431 const std::string DEVICE_DB_SYNC_STATUS = "sync_status";
432 const std::string DEVICE_DB_PHOTO_SYNC_STATUS = "photo_table_sync_status";
433 const std::string DEVICE_DB_SELF_ID = "self_id";
434 const std::string DEVICE_DB_TYPE = "device_type";
435 const std::string DEVICE_DB_PREPATH = "pre_path";
436 const std::string DEVICE_DB_DATE_ADDED = "date_added";
437 const std::string DEVICE_DB_DATE_MODIFIED = "date_modified";
438 const std::string CREATE_DEVICE_TABLE = "CREATE TABLE IF NOT EXISTS " + DEVICE_TABLE + " (" +
439                                             DEVICE_DB_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
440                                             DEVICE_DB_UDID + " TEXT, " +
441                                             DEVICE_DB_NETWORK_ID + " TEXT, " +
442                                             DEVICE_DB_NAME + " TEXT, " +
443                                             DEVICE_DB_IP + " TEXT DEFAULT '', " +
444                                             DEVICE_DB_SYNC_STATUS + " INT DEFAULT 0, " +
445                                             DEVICE_DB_PHOTO_SYNC_STATUS + " INT DEFAULT 0, " +
446                                             DEVICE_DB_SELF_ID + " TEXT, " +
447                                             DEVICE_DB_TYPE + " INT, " +
448                                             DEVICE_DB_PREPATH + " TEXT, " +
449                                             DEVICE_DB_DATE_ADDED + " BIGINT DEFAULT 0, " +
450                                             DEVICE_DB_DATE_MODIFIED + " BIGINT DEFAULT 0) ";
451 const std::string SMARTALBUM_TABLE_NAME = "smartalbum";
452 const std::string SMARTALBUMMAP_TABLE_NAME = "smartAlbumMap";
453 const std::string CATEGORY_SMARTALBUMMAP_TABLE_NAME = "categorySmartAlbumMap";
454 const std::string SMARTALBUMASSETS_VIEW_NAME = "SmartAsset";
455 const std::string SMARTALBUMASSETS_ALBUMCAPACITY = "size";
456 const std::string SMARTABLUMASSETS_PARENTID = "parentid";
457 const std::string CREATE_SMARTALBUMASSETS_VIEW = "CREATE VIEW IF NOT EXISTS " + SMARTALBUMASSETS_VIEW_NAME +
458                         " AS SELECT COUNT(" +
459                         MEDIALIBRARY_TABLE + "."+ MEDIA_DATA_DB_DATE_TRASHED + " = 0 OR (" +
460                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_ID + " = " +
461                         std::to_string(TRASH_ALBUM_ID_VALUES) + " AND " +
462                         MEDIALIBRARY_TABLE + "."+ MEDIA_DATA_DB_IS_TRASH + "<> 0)" +
463                         " OR NULL ) AS " + SMARTALBUMASSETS_ALBUMCAPACITY + ", " +
464                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_ID + ", " +
465                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_NAME + ", " +
466                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_SELF_ID + ", " +
467                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_DESCRIPTION + ", " +
468                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_EXPIRED_TIME + ", " +
469                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_COVER_URI + ", " +
470                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_ALBUM_TYPE + ", " +
471                         SMARTALBUM_MAP_TABLE + "." + SMARTALBUMMAP_DB_ID + ", " +
472                         "a." + SMARTALBUMMAP_DB_ALBUM_ID + " AS " + SMARTABLUMASSETS_PARENTID +
473                         " FROM " + SMARTALBUM_TABLE + " " + SMARTALBUM_TABLE_NAME +
474                         " LEFT JOIN " + SMARTALBUM_MAP_TABLE +
475                         " ON " + SMARTALBUM_MAP_TABLE + "." + SMARTALBUMMAP_DB_ALBUM_ID + " = " +
476                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_ID +
477                         " LEFT JOIN " + MEDIALIBRARY_TABLE +
478                         " ON " + SMARTALBUM_MAP_TABLE + "." + SMARTALBUMMAP_DB_CHILD_ASSET_ID + " = " +
479                         MEDIALIBRARY_TABLE + "." + MEDIA_DATA_DB_ID +
480                         " LEFT JOIN " + SMARTALBUM_MAP_TABLE + " a " +
481                         " ON a." + SMARTALBUMMAP_DB_CHILD_ALBUM_ID + " = " +
482                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_ID +
483                         " GROUP BY IFNULL( " + SMARTALBUM_MAP_TABLE + "." + SMARTALBUMMAP_DB_ALBUM_ID + ", " +
484                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_ID + " ), " +
485                         SMARTALBUM_TABLE_NAME + "." + SMARTALBUM_DB_SELF_ID;
486 const std::string ASSETMAP_VIEW_NAME = "AssetMap";
487 const std::string CREATE_ASSETMAP_VIEW = "CREATE VIEW IF NOT EXISTS " + ASSETMAP_VIEW_NAME +
488                         " AS SELECT * FROM " +
489                         MEDIALIBRARY_TABLE + " a " + ", " +
490                         SMARTALBUM_MAP_TABLE + " b " +
491                         " WHERE " +
492                         "a." + MEDIA_DATA_DB_ID + " = " +
493                         "b." + SMARTALBUMMAP_DB_CHILD_ASSET_ID;
494 
495 const std::string QUERY_MEDIA_VOLUME = "SELECT sum(" + MEDIA_DATA_DB_SIZE + ") AS " +
496                         MEDIA_DATA_DB_SIZE + "," +
497                         MEDIA_DATA_DB_MEDIA_TYPE + " FROM " +
498                         MEDIALIBRARY_TABLE + " WHERE " +
499                         MEDIA_DATA_DB_MEDIA_TYPE + " = " + std::to_string(MEDIA_TYPE_FILE) + " OR " +
500                         MEDIA_DATA_DB_MEDIA_TYPE + " = " + std::to_string(MEDIA_TYPE_IMAGE) + " OR " +
501                         MEDIA_DATA_DB_MEDIA_TYPE + " = " + std::to_string(MEDIA_TYPE_VIDEO) + " OR " +
502                         MEDIA_DATA_DB_MEDIA_TYPE + " = " + std::to_string(MEDIA_TYPE_ALBUM) + " OR " +
503                         MEDIA_DATA_DB_MEDIA_TYPE + " = " + std::to_string(MEDIA_TYPE_AUDIO) + " GROUP BY " +
504                         MEDIA_DATA_DB_MEDIA_TYPE;
505 
506 const std::string CREATE_FILES_DELETE_TRIGGER = "CREATE TRIGGER delete_trigger AFTER UPDATE ON " +
507                         MEDIALIBRARY_TABLE + " FOR EACH ROW WHEN new.dirty = " +
508                         std::to_string(static_cast<int32_t>(DirtyType::TYPE_DELETED)) +
509                         " and OLD.cloud_id is NULL AND is_caller_self_func() = 'true'" +
510                         " BEGIN " +
511                         " DELETE FROM " + MEDIALIBRARY_TABLE + " WHERE file_id = old.file_id;" +
512                         " END;";
513 
514 const std::string CREATE_FILES_FDIRTY_TRIGGER = "CREATE TRIGGER fdirty_trigger AFTER UPDATE ON " +
515                         MEDIALIBRARY_TABLE + " FOR EACH ROW WHEN OLD.cloud_id IS NOT NULL AND" +
516                         " new.date_modified <> old.date_modified AND is_caller_self_func() = 'true'" +
517                         " BEGIN " +
518                         " UPDATE " + MEDIALIBRARY_TABLE + " SET dirty = " +
519                         std::to_string(static_cast<int32_t>(DirtyType::TYPE_FDIRTY)) +
520                         " WHERE file_id = old.file_id;" +
521                         " SELECT cloud_sync_func(); " +
522                         " END;";
523 
524 const std::string CREATE_FILES_MDIRTY_TRIGGER = "CREATE TRIGGER mdirty_trigger AFTER UPDATE ON " +
525                         MEDIALIBRARY_TABLE + " FOR EACH ROW WHEN OLD.cloud_id IS NOT NULL" +
526                         " AND new.time_visit = old.time_visit " +
527                         " AND new.date_modified = old.date_modified AND old.dirty = " +
528                         std::to_string(static_cast<int32_t>(DirtyType::TYPE_SYNCED)) +
529                         " AND new.dirty = old.dirty AND is_caller_self_func() = 'true'" +
530                         " BEGIN " +
531                         " UPDATE " + MEDIALIBRARY_TABLE + " SET dirty = " +
532                         std::to_string(static_cast<int32_t>(DirtyType::TYPE_MDIRTY)) +
533                         " WHERE file_id = old.file_id;" +
534                         " SELECT cloud_sync_func(); " +
535                         " END;";
536 
537 const std::string CREATE_INSERT_CLOUD_SYNC_TRIGGER =
538                         " CREATE TRIGGER insert_cloud_sync_trigger AFTER INSERT ON " + MEDIALIBRARY_TABLE +
539                         " BEGIN SELECT cloud_sync_func(); END;";
540 
541 /*
542  * Error Table
543  */
544 const std::string MEDIALIBRARY_ERROR_TABLE = "Error";
545 const std::string MEDIA_DATA_ERROR = "err";
546 const std::string CREATE_MEDIALIBRARY_ERROR_TABLE = "CREATE TABLE IF NOT EXISTS " + MEDIALIBRARY_ERROR_TABLE + " ("
547     + MEDIA_DATA_ERROR + " TEXT PRIMARY KEY)";
548 
549 /*
550  * Media Unique Number Table
551  */
552 const std::string ASSET_UNIQUE_NUMBER_TABLE = "UniqueNumber";
553 const std::string ASSET_MEDIA_TYPE = "media_type";
554 const std::string UNIQUE_NUMBER = "unique_number";
555 const std::string CREATE_ASSET_UNIQUE_NUMBER_TABLE = "CREATE TABLE IF NOT EXISTS " + ASSET_UNIQUE_NUMBER_TABLE + " (" +
556     ASSET_MEDIA_TYPE + " TEXT, " + UNIQUE_NUMBER + " INT DEFAULT 0) ";
557 
558 const std::string IMAGE_ASSET_TYPE = "image";
559 const std::string VIDEO_ASSET_TYPE = "video";
560 const std::string AUDIO_ASSET_TYPE = "audio";
561 
562 // fetch columns from fileAsset in medialibrary.d.ts
563 static const std::vector<std::string> FILE_ASSET_COLUMNS = {
564     MEDIA_DATA_DB_ID, MEDIA_DATA_DB_FILE_PATH, MEDIA_DATA_DB_URI, MEDIA_DATA_DB_MIME_TYPE, MEDIA_DATA_DB_MEDIA_TYPE,
565     MEDIA_DATA_DB_NAME, MEDIA_DATA_DB_TITLE, MEDIA_DATA_DB_RELATIVE_PATH, MEDIA_DATA_DB_PARENT_ID, MEDIA_DATA_DB_SIZE,
566     MEDIA_DATA_DB_DATE_ADDED, MEDIA_DATA_DB_DATE_MODIFIED, MEDIA_DATA_DB_DATE_TAKEN, MEDIA_DATA_DB_ARTIST,
567     MEDIA_DATA_DB_WIDTH, MEDIA_DATA_DB_HEIGHT, MEDIA_DATA_DB_ORIENTATION, MEDIA_DATA_DB_DURATION,
568     MEDIA_DATA_DB_BUCKET_ID, MEDIA_DATA_DB_BUCKET_NAME, MEDIA_DATA_DB_IS_TRASH, MEDIA_DATA_DB_IS_FAV,
569     MEDIA_DATA_DB_DATE_TRASHED
570 };
571 
572 const std::string EMPTY_COLUMN_AS = "'' AS ";
573 const std::string DEFAULT_INT_COLUMN_AS = "0 AS ";
574 const std::string COMPAT_COLUMN_ARTIST = EMPTY_COLUMN_AS + MEDIA_DATA_DB_ARTIST;
575 const std::string COMPAT_COLUMN_AUDIO_ALBUM = EMPTY_COLUMN_AS + MEDIA_DATA_DB_AUDIO_ALBUM;
576 const std::string COMPAT_COLUMN_ORIENTATION = DEFAULT_INT_COLUMN_AS + MEDIA_DATA_DB_ORIENTATION;
577 const std::string COMPAT_COLUMN_BUCKET_ID = DEFAULT_INT_COLUMN_AS + MEDIA_DATA_DB_BUCKET_ID;
578 const std::string COMPAT_COLUMN_BUCKET_NAME = EMPTY_COLUMN_AS + MEDIA_DATA_DB_BUCKET_NAME;
579 const std::string COMPAT_COLUMN_IS_TRASH = MEDIA_DATA_DB_DATE_TRASHED + " AS " + MEDIA_DATA_DB_IS_TRASH;
580 const std::string COMPAT_COLUMN_WIDTH = DEFAULT_INT_COLUMN_AS + MEDIA_DATA_DB_WIDTH;
581 const std::string COMPAT_COLUMN_HEIGHT = DEFAULT_INT_COLUMN_AS + MEDIA_DATA_DB_HEIGHT;
582 const std::string COMPAT_COLUMN_URI = EMPTY_COLUMN_AS + MEDIA_DATA_DB_URI;
583 
584 // Caution: Keep same definition as MediaColumn! Only for where clause check in API9 getAlbums and album.getFileAssets
585 const std::string COMPAT_ALBUM_SUBTYPE = "album_subtype";
586 const std::string COMPAT_HIDDEN = "hidden";
587 const std::string COMPAT_PHOTO_SYNC_STATUS = "sync_status";
588 const std::string COMPAT_FILE_SUBTYPE = "subtype";
589 const std::string COMPAT_CAMERA_SHOT_KEY = "camera_shot_key";
590 
591 // system relativePath and albumName, use for API9 compatible API10
592 const std::string CAMERA_PATH = "Camera/";
593 const std::string SCREEN_SHOT_PATH = "Pictures/Screenshots/";
594 const std::string SCREEN_RECORD_PATH = "Videos/ScreenRecordings/";
595 
596 const std::string CAMERA_ALBUM_NAME = "Camera";
597 const std::string SCREEN_SHOT_ALBUM_NAME = "Screenshots";
598 const std::string SCREEN_RECORD_ALBUM_NAME = "ScreenRecordings";
599 
600 // extension
601 const std::string ASSET_EXTENTION = "extention";
602 
603 // delete_tool
604 const std::string DELETE_TOOL_ONLY_DATABASE = "only_db";
605 
606 } // namespace Media
607 } // namespace OHOS
608 
609 #endif  // INTERFACES_INNERKITS_NATIVE_INCLUDE_MEDIA_DATA_ABILITY_CONST_H_
610