4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hyunjun Ko <zzoon.ko@samsung.com>, Haejeong Kim <backto.kim@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
23 #include <media-util.h>
25 #include "media-svc-env.h"
26 #include "media-svc-debug.h"
27 #include "media-svc-util.h"
28 #include "media-svc-db-utils.h"
29 #include "media-util-err.h"
30 #include "media-util-db.h"
31 #include "media-svc-media.h"
33 static int __media_svc_db_upgrade(sqlite3 *db_handle, int cur_version, uid_t uid);
34 static int __media_svc_rebuild_view_query(sqlite3 *db_handle, uid_t uid);
35 static int __media_svc_query_direct(sqlite3 *handle, const char *query, uid_t uid);
38 static GHashTable *table;
39 static GSList *column_list[MEDIA_SVC_DB_LIST_MAX];
41 int __media_svc_add_table_info(const char *name, const char *trigger_name, const char *event_table, const char *action_table, const char *view_name)
43 table_info_s *tbl = NULL;
45 media_svc_retvm_if(!STRING_VALID(name), MS_MEDIA_ERR_INVALID_PARAMETER, "name is NULL");
47 if (STRING_VALID(trigger_name)) {
48 media_svc_retvm_if(!STRING_VALID(event_table), MS_MEDIA_ERR_INVALID_PARAMETER, "event_table is NULL");
49 media_svc_retvm_if(!STRING_VALID(action_table), MS_MEDIA_ERR_INVALID_PARAMETER, "action_table is NULL");
52 tbl = malloc(sizeof(table_info_s));
54 media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY");
55 return MS_MEDIA_ERR_OUT_OF_MEMORY;
58 memset(tbl, 0x00, sizeof(table_info_s));
60 if (STRING_VALID(trigger_name)) {
61 tbl->trigger_name = malloc(MEDIA_SVC_PATHNAME_SIZE);
62 if (tbl->trigger_name == NULL) {
63 media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY");
65 return MS_MEDIA_ERR_OUT_OF_MEMORY;
68 memset(tbl->trigger_name, 0x00, MEDIA_SVC_PATHNAME_SIZE);
69 snprintf(tbl->trigger_name, MEDIA_SVC_PATHNAME_SIZE, "%s_%s", trigger_name, event_table);
71 tbl->event_table = strndup(event_table, strlen(event_table));
72 tbl->action_table = strndup(action_table, strlen(action_table));
75 if (STRING_VALID(view_name))
76 tbl->view_name = strndup(view_name, strlen(view_name));
78 g_hash_table_insert(table, (gpointer)name, (gpointer)tbl);
80 return MS_MEDIA_ERR_NONE;
83 int __media_svc_add_column_info(GSList **slist, const char *name, const char *type, const char *option, int version, const char *index_name, bool is_unique, bool is_trigger, bool is_view)
85 column_info_s *col = NULL;
86 col = malloc(sizeof(column_info_s));
88 media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY");
89 return MS_MEDIA_ERR_OUT_OF_MEMORY;
91 memset(col, 0, sizeof(column_info_s));
93 col->name = strndup(name, strlen(name));
94 col->type = strndup(type, strlen(type));
96 col->has_option = true;
97 col->option = strndup(option, strlen(option));
99 col->has_option = false;
101 col->version = version;
102 if (index_name != NULL) {
103 col->is_index = true;
104 col->index_name = strndup(index_name, strlen(index_name));
106 col->is_index = false;
108 col->is_unique = is_unique;
109 col->is_trigger = is_trigger;
110 col->is_view = is_view;
111 *slist = g_slist_append(*slist, col);
113 return MS_MEDIA_ERR_NONE;
116 static int __media_svc_rebuild_view_query(sqlite3 *db_handle, uid_t uid)
118 int ret = MS_MEDIA_ERR_NONE;
119 column_info_s *col_ptr = NULL;
121 char table_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
122 char temp[1024] = {0, };
126 _media_svc_update_media_view(db_handle, uid);
128 /*drop playlist_view, tag_view */
129 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_DROP_VIEW, MEDIA_SVC_DB_VIEW_PLAYLIST);
130 ret = _media_svc_sql_query(sql, uid);
131 SQLITE3_SAFE_FREE(sql);
132 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
134 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_DROP_VIEW, MEDIA_SVC_DB_VIEW_TAG);
135 ret = _media_svc_sql_query(sql, uid);
136 SQLITE3_SAFE_FREE(sql);
137 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
139 /*create playlist_view */
140 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]);
141 for (i = 1; i < len; i++) {
142 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i);
143 if (col_ptr->is_view) {
145 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_THUMBNAIL, strlen(MEDIA_SVC_DB_COLUMN_THUMBNAIL)) == 0)
146 snprintf(temp, sizeof(temp), ", playlist.%s AS p_thumbnail_path", col_ptr->name);
148 snprintf(temp, sizeof(temp), ", playlist.%s", col_ptr->name);
150 snprintf(temp, sizeof(temp), "playlist.%s", col_ptr->name);
153 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
155 memset(temp, 0, sizeof(temp));
157 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]);
158 for (i = 1; i < len; i++) {
159 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i);
160 if (col_ptr->is_view) {
161 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
162 snprintf(temp, sizeof(temp), ", playlist_media_count IS NOT NULL AS playlist_media_count, playlist_map.%s AS pm_id", col_ptr->name);
164 snprintf(temp, sizeof(temp), ", playlist_map.%s", col_ptr->name);
165 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
167 memset(temp, 0, sizeof(temp));
170 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
171 for (i = 1; i < len; i++) {
172 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
173 if (col_ptr->is_view) {
174 snprintf(temp, sizeof(temp), ", media_view.%s", col_ptr->name);
175 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
177 memset(temp, 0, sizeof(temp));
179 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_PLAYLIST, MEDIA_SVC_DB_VIEW_PLAYLIST, table_query);
180 ret = _media_svc_sql_query(sql, uid);
181 SQLITE3_SAFE_FREE(sql);
182 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
186 memset(table_query, 0, sizeof(table_query));
188 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]);
189 for (i = 1; i < len; i++) {
190 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i);
191 if (col_ptr->is_view) {
193 snprintf(temp, sizeof(temp), ", tag.%s", col_ptr->name);
195 snprintf(temp, sizeof(temp), "tag.%s", col_ptr->name);
198 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
200 memset(temp, 0, sizeof(temp));
202 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]);
203 for (i = 1; i < len; i++) {
204 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i);
205 if (col_ptr->is_view) {
206 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
207 snprintf(temp, sizeof(temp), ", tag_media_count IS NOT NULL AS tag_media_count, tag_map.%s AS tm_id", col_ptr->name);
209 snprintf(temp, sizeof(temp), ", tag_map.%s", col_ptr->name);
210 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
212 memset(temp, 0, sizeof(temp));
215 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
216 for (i = 1; i < len; i++) {
217 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
218 if (col_ptr->is_view) {
219 snprintf(temp, sizeof(temp), ", media_view.%s", col_ptr->name);
220 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
222 memset(temp, 0, sizeof(temp));
224 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_TAG, MEDIA_SVC_DB_VIEW_TAG, table_query);
225 ret = _media_svc_sql_query(sql, uid);
226 SQLITE3_SAFE_FREE(sql);
227 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
229 return MS_MEDIA_ERR_NONE;
232 int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e list, uid_t uid)
234 int ret = MS_MEDIA_ERR_NONE;
235 table_info_s *tb = NULL;
236 column_info_s *col_ptr = NULL;
238 char table_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
239 char index_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
240 char trigger_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
241 char table_query_sub[1024] = {0, };
242 char temp[1024] = {0 ,};
244 bool sub_flag = false;
248 tb = g_hash_table_lookup(table, table_name);
250 media_svc_debug("lookup fail.. table name [%s] ", table_name);
251 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_MEDIA);
254 len = g_slist_length(column_list[list]);
257 media_svc_error("Invalid column");
258 return MS_MEDIA_ERR_INTERNAL;
261 for (i = 1; i < len; i++) {
262 col_ptr = g_slist_nth_data(column_list[list], i);
264 if (col_ptr->has_option) {
266 snprintf(temp, sizeof(temp), ", %s %s %s", col_ptr->name, col_ptr->type, col_ptr->option);
268 snprintf(temp, sizeof(temp), "%s %s %s", col_ptr->name, col_ptr->type, col_ptr->option);
271 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
274 snprintf(temp, sizeof(temp), ", %s %s", col_ptr->name, col_ptr->type);
276 snprintf(temp, sizeof(temp), "%s %s", col_ptr->name, col_ptr->type);
279 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
281 memset(temp, 0, sizeof(temp));
284 if (col_ptr->is_unique) {
285 if (sub_flag == true) {
286 snprintf(temp, sizeof(temp), ", %s", col_ptr->name);
288 snprintf(temp, sizeof(temp), "%s", col_ptr->name);
291 SAFE_STRLCAT(table_query_sub, temp, sizeof(table_query_sub));
293 memset(temp, 0, sizeof(temp));
296 if (col_ptr->is_index) {
297 snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_INDEX, col_ptr->index_name, table_name, col_ptr->name);
298 SAFE_STRLCAT(index_query, temp, sizeof(index_query));
300 memset(temp, 0, sizeof(temp));
303 if (col_ptr->is_trigger) {
304 if (STRING_VALID(tb->trigger_name)) {
305 if (strncmp(table_name, MEDIA_SVC_DB_TABLE_ALBUM, strlen(MEDIA_SVC_DB_TABLE_ALBUM)) == 0)
306 snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_TRIGGER_WITH_COUNT, tb->trigger_name, tb->event_table, tb->action_table, tb->event_table, col_ptr->name, col_ptr->name, col_ptr->name, col_ptr->name);
308 snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_TRIGGER, tb->trigger_name, tb->event_table, tb->action_table, col_ptr->name, col_ptr->name);
310 SAFE_STRLCAT(trigger_query, temp, sizeof(trigger_query));
312 media_svc_error("invalid trigger name");
315 memset(temp, 0, sizeof(temp));
319 if (sub_flag == true) {
320 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TABLE_WITH_UNIQUE, table_name, table_query, table_query_sub);
321 ret = _media_svc_sql_query(sql, uid);
322 SQLITE3_SAFE_FREE(sql);
323 memset(table_query, 0, sizeof(table_query));
324 memset(table_query_sub, 0, sizeof(table_query_sub));
325 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
327 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TABLE, table_name, table_query);
328 ret = _media_svc_sql_query(sql, uid);
329 SQLITE3_SAFE_FREE(sql);
330 memset(table_query, 0, sizeof(table_query));
331 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
334 if (STRING_VALID(index_query)) {
335 ret = _media_svc_sql_query(index_query, uid);
336 memset(index_query, 0, sizeof(index_query));
337 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
340 if (STRING_VALID(trigger_query)) {
341 ret = _media_svc_sql_query(trigger_query, uid);
342 memset(trigger_query, 0, sizeof(trigger_query));
343 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
348 if (tb != NULL && tb->view_name != NULL) {
349 if (strncmp(table_name, MEDIA_SVC_DB_TABLE_MEDIA, strlen(MEDIA_SVC_DB_TABLE_MEDIA)) == 0) {
350 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_MEDIA, tb->view_name, table_name);
351 ret = _media_svc_sql_query(sql, uid);
352 SQLITE3_SAFE_FREE(sql);
353 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
355 } else if (strncmp(table_name, MEDIA_SVC_DB_TABLE_PLAYLIST, strlen(MEDIA_SVC_DB_TABLE_PLAYLIST)) == 0) {
356 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]);
357 for (i = 1; i < len; i++) {
358 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i);
359 if (col_ptr->is_view) {
361 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_THUMBNAIL, strlen(MEDIA_SVC_DB_COLUMN_THUMBNAIL)) == 0)
362 snprintf(temp, sizeof(temp), ", playlist.%s AS p_thumbnail_path", col_ptr->name);
364 snprintf(temp, sizeof(temp), ", playlist.%s", col_ptr->name);
366 snprintf(temp, sizeof(temp), "playlist.%s", col_ptr->name);
369 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
371 memset(temp, 0, sizeof(temp));
373 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]);
374 for (i = 1; i < len; i++) {
375 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i);
376 if (col_ptr->is_view) {
377 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
378 snprintf(temp, sizeof(temp), ", playlist_media_count IS NOT NULL AS playlist_media_count, playlist_map.%s AS pm_id", col_ptr->name);
380 snprintf(temp, sizeof(temp), ", playlist_map.%s", col_ptr->name);
381 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
383 memset(temp, 0, sizeof(temp));
386 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
387 for (i = 1; i < len; i++) {
388 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
389 if (col_ptr->is_view) {
390 snprintf(temp, sizeof(temp), ", media_view.%s", col_ptr->name);
391 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
393 memset(temp, 0, sizeof(temp));
395 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_PLAYLIST, tb->view_name, table_query);
396 ret = _media_svc_sql_query(sql, uid);
397 SQLITE3_SAFE_FREE(sql);
398 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
401 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]);
402 for (i = 1; i < len; i++) {
403 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i);
404 if (col_ptr->is_view) {
406 snprintf(temp, sizeof(temp), ", tag.%s", col_ptr->name);
408 snprintf(temp, sizeof(temp), "tag.%s", col_ptr->name);
411 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
413 memset(temp, 0, sizeof(temp));
415 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]);
416 for (i = 1; i < len; i++) {
417 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i);
418 if (col_ptr->is_view) {
419 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
420 snprintf(temp, sizeof(temp), ", tag_media_count IS NOT NULL AS tag_media_count, tag_map.%s AS tm_id", col_ptr->name);
422 snprintf(temp, sizeof(temp), ", tag_map.%s", col_ptr->name);
423 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
425 memset(temp, 0, sizeof(temp));
428 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
429 for (i = 1; i < len; i++) {
430 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
431 if (col_ptr->is_view) {
432 snprintf(temp, sizeof(temp), ", media_view.%s", col_ptr->name);
433 SAFE_STRLCAT(table_query, temp, sizeof(table_query));
435 memset(temp, 0, sizeof(temp));
437 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_TAG, tb->view_name, table_query);
438 ret = _media_svc_sql_query(sql, uid);
439 SQLITE3_SAFE_FREE(sql);
440 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
444 return MS_MEDIA_ERR_NONE;
447 int _media_svc_upgrade_table_query(sqlite3 *db_handle, const char *table_name, media_svc_table_slist_e list, uid_t uid)
449 int ret = MS_MEDIA_ERR_NONE;
450 column_info_s *col_ptr = NULL;
452 char temp[1024] = {0, };
455 sqlite3_stmt *sql_stmt = NULL;
457 len = g_slist_length(column_list[list]);
459 sql = sqlite3_mprintf("PRAGMA user_version");
460 ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
462 if (ret != MS_MEDIA_ERR_NONE) {
463 media_svc_error("error when get user_version. err = [%d]", ret);
466 cur_version = sqlite3_column_int(sql_stmt, 0);
467 SQLITE3_FINALIZE(sql_stmt);
469 len = g_slist_length(column_list[list]);
470 for (i = 1; i < len; i++) {
471 col_ptr = g_slist_nth_data(column_list[list], i);
472 if (col_ptr->version > cur_version) {
474 if (col_ptr->has_option)
475 snprintf(temp, sizeof(temp), "%s %s %s", col_ptr->name, col_ptr->type, col_ptr->option);
477 snprintf(temp, sizeof(temp), "%s %s", col_ptr->name, col_ptr->type);
478 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_ALTER_TABLE, table_name, temp);
479 ret = _media_svc_sql_query(sql, uid);
480 SQLITE3_SAFE_FREE(sql);
481 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
483 if (col_ptr->is_index) {
484 memset(temp, 0, sizeof(temp));
485 snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_INDEX, col_ptr->index_name, table_name, col_ptr->name);
486 ret = _media_svc_sql_query(temp, uid);
487 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
490 memset(temp, 0, sizeof(temp));
493 return MS_MEDIA_ERR_NONE;
496 int _media_svc_init_table_query(const char *event_table_name)
498 int ret = MS_MEDIA_ERR_NONE;
501 /*variable initialize.. */
502 table = g_hash_table_new(g_str_hash, g_str_equal);
503 for (i = 0; i < MEDIA_SVC_DB_LIST_MAX; i++)
504 column_list[i] = g_slist_alloc();
506 /*table specification.. (table_name, index, unique set, trigger, view, trigger name, event table, action table, view name) */
507 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_MEDIA, NULL, NULL, NULL, MEDIA_SVC_DB_VIEW_MEDIA);
508 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
509 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TRIGGER_FOLDER, event_table_name, MEDIA_SVC_DB_TABLE_FOLDER, NULL);
510 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
511 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_TRIGGER_PLAYLIST_MAP, event_table_name, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, NULL);
512 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
513 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_PLAYLIST, MEDIA_SVC_DB_TRIGGER_PLAYLIST_MAP1, MEDIA_SVC_DB_TABLE_PLAYLIST, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_VIEW_PLAYLIST);
514 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
515 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_TRIGGER_ALBUM, event_table_name, MEDIA_SVC_DB_TABLE_ALBUM, NULL);
516 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
517 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_TRIGGER_TAG_MAP, event_table_name, MEDIA_SVC_DB_TABLE_TAG_MAP, NULL);
518 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
519 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_TAG, MEDIA_SVC_DB_TRIGGER_TAG_MAP1, MEDIA_SVC_DB_TABLE_TAG, MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_VIEW_TAG);
520 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
521 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_TRIGGER_BOOKMARK, event_table_name, MEDIA_SVC_DB_TABLE_BOOKMARK, NULL);
522 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
523 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_STORAGE, NULL, NULL, NULL, NULL);
524 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
525 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TRIGGER_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, NULL);
526 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
527 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_FACE, MEDIA_SVC_DB_TRIGGER_FACE, MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_FACE, NULL);
528 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
530 /*insert column info.. */
532 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_id", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V2, NULL, false, false, true);
533 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
534 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL UNIQUE", USER_V2, NULL, false, false, true);
535 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
536 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_display_name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, "media_file_name_idx", false, false, true);
537 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
538 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_type", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V2, NULL, false, false, true);
539 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
540 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_mime_type", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
541 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
542 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_size", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
543 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
544 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_added_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
545 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
546 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_modified_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, "media_modified_time_idx", false, false, true);
547 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
548 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "folder_id", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, "folder_uuid_idx", false, false, false);
549 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
550 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_thumbnail_path", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
551 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
552 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_title", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
553 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
554 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album_id", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, false);
555 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
556 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_album", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
557 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
558 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_artist", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
559 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
560 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_album_artist", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
561 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
562 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_genre", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
563 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
564 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_composer", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
565 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
566 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_year", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
567 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
568 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_recorded_date", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
569 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
570 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_copyright", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
571 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
572 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_track_num", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
573 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
574 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_description", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
575 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
576 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_bitrate", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
577 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
578 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_bitpersample", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, true);
579 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
580 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_samplerate", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
581 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
582 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_channel", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
583 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
584 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_duration", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
585 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
586 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_longitude", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V2, NULL, false, false, true);
587 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
588 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_latitude", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V2, NULL, false, false, true);
589 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
590 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_altitude", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V2, NULL, false, false, true);
591 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
592 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "exposure_time", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, true);
593 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
594 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "fnumber", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V4, NULL, false, false, true);
595 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
596 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "iso", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V4, NULL, false, false, true);
597 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
598 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "model", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, true);
599 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
600 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_width", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
601 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
602 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_height", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
603 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
604 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_datetaken", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
605 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
606 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_orientation", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
607 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
608 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_rating", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
609 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
610 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_favourite", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
611 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
612 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_is_drm", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
613 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
614 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_storage_type", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V2, NULL, false, false, true);
615 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
616 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_timeline", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, "media_timeline_idx", false, false, true);
617 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
618 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "sync_status", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
619 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
620 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_file_name_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
621 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
622 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_title_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
623 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
624 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_album_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
625 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
626 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_artist_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
627 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
628 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_album_artist_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
629 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
630 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_genre_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
631 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
632 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_composer_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
633 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
634 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_copyright_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
635 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
636 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_description_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
637 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
638 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "age_rating_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
639 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
640 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "keyword_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
641 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
642 /* storage_uuid column is added in DB v4. When doing DB upgrade to v4, if storage_uuid is NOT NULL, alter table failed. */
643 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "storage_uuid", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, true);
644 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
645 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "validity", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 1", USER_V2, NULL, false, false, false);
646 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
647 /* color column is added with dcm. (DB v5) */
648 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_360", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V5, NULL, false, false, true);
649 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
652 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_id", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V2, NULL, false, false, false);
653 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
654 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, true, false, false);
655 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
656 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, false, false, false);
657 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
658 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_modified_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, false);
659 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
660 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_name_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
661 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
662 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_storage_type", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V2, NULL, false, false, false);
663 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
664 /* storage_uuid column is added in DB v4. When doing DB upgrade to v4, if storage_uuid is NOT NULL, alter table failed. */
665 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "storage_uuid", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, true, false, false);
666 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
667 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "validity", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 1", USER_V4, NULL, false, false, false);
668 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
671 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], "_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, false, true);
672 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
673 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], "playlist_id", MEDIA_SVC_DB_TYPE_INT, "NOT NULL", USER_V2, NULL, false, false, false);
674 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
675 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], "media_id", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, false, true, false);
676 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
677 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], "playlist_member_order", MEDIA_SVC_DB_TYPE_INT, "NOT NULL", USER_V2, NULL, false, false, true);
678 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
681 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST], "playlist_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, true, true);
682 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
683 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST], "playlist_name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL UNIQUE", USER_V2, NULL, false, false, true);
684 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
685 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST], "thumbnail_path", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
686 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
689 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_ALBUM], "album_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, true, false);
690 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
691 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_ALBUM], "name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, false, false, false);
692 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
693 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_ALBUM], "artist", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
694 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
695 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_ALBUM], "album_art", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
696 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
699 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG_MAP], "_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, false, true);
700 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
701 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG_MAP], "tag_id", MEDIA_SVC_DB_TYPE_INT, "NOT NULL", USER_V2, NULL, true, false, false);
702 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
703 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG_MAP], "media_id", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, true, true, false);
704 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
707 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG], "tag_id ", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, true, true);
708 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
709 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG], "tag_name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL UNIQUE", USER_V2, NULL, false, false, true);
710 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
713 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "bookmark_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, false, false);
714 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
715 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "media_id", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, true, true, false);
716 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
717 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "bookmark_marked_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, true, false, false);
718 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
719 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "bookmark_thumbnail_path", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
720 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
721 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "bookmark_name", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V6, NULL, false, false, false);
722 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
725 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "storage_id", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V3, NULL, false, false, false);
726 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
727 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "storage_path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V3, NULL, false, false, false);
728 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
729 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "storage_type", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, false);
730 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
731 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "validity", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 1", USER_V3, NULL, false, false, false);
732 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
735 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE_SCAN_LIST], "media_id", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL UNIQUE", USER_V4, NULL, false, true, false);
736 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
737 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE_SCAN_LIST], "modified_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V6, NULL, false, false, false);
738 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
741 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "media_face_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V4, NULL, false, false, false);
742 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
743 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "media_id", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V4, NULL, true, true, false);
744 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
745 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_rect_x", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, true, false, false);
746 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
747 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_rect_y", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, true, false, false);
748 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
749 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_rect_w", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, true, false, false);
750 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
751 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_rect_h", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, true, false, false);
752 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
753 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_orientation", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
754 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
755 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "media_face_tag", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
756 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
760 void __media_svc_table_free(table_info_s *tb)
762 SAFE_FREE(tb->trigger_name);
763 SAFE_FREE(tb->view_name);
764 SAFE_FREE(tb->event_table);
765 SAFE_FREE(tb->action_table);
769 void __media_svc_column_free(column_info_s *col)
771 SAFE_FREE(col->name);
772 SAFE_FREE(col->type);
773 SAFE_FREE(col->option);
774 SAFE_FREE(col->index_name);
778 void _media_svc_destroy_table_query()
781 table_info_s *tb = NULL;
782 column_info_s *col_ptr = NULL;
786 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_MEDIA);
787 __media_svc_table_free(tb);
788 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_MEDIA);
790 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_FOLDER);
791 __media_svc_table_free(tb);
792 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_FOLDER);
794 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PLAYLIST);
795 __media_svc_table_free(tb);
796 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PLAYLIST);
798 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP);
799 __media_svc_table_free(tb);
800 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP);
802 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_ALBUM);
803 __media_svc_table_free(tb);
804 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_ALBUM);
806 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_TAG);
807 __media_svc_table_free(tb);
808 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_TAG);
810 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_TAG_MAP);
811 __media_svc_table_free(tb);
812 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_TAG_MAP);
814 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_BOOKMARK);
815 __media_svc_table_free(tb);
816 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_BOOKMARK);
818 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_STORAGE);
819 __media_svc_table_free(tb);
820 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_STORAGE);
822 g_hash_table_destroy(table);
825 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
827 for (i = 1; i < len; i++) {
828 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
829 __media_svc_column_free(col_ptr);
832 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_FOLDER]);
834 for (i = 1; i < len; i++) {
835 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_FOLDER], i);
836 __media_svc_column_free(col_ptr);
839 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]);
841 for (i = 1; i < len; i++) {
842 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i);
843 __media_svc_column_free(col_ptr);
846 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]);
848 for (i = 1; i < len; i++) {
849 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i);
850 __media_svc_column_free(col_ptr);
853 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_ALBUM]);
855 for (i = 1; i < len; i++) {
856 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_ALBUM], i);
857 __media_svc_column_free(col_ptr);
860 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]);
862 for (i = 1; i < len; i++) {
863 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i);
864 __media_svc_column_free(col_ptr);
867 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]);
869 for (i = 1; i < len; i++) {
870 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i);
871 __media_svc_column_free(col_ptr);
874 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_BOOKMARK]);
876 for (i = 1; i < len; i++) {
877 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_BOOKMARK], i);
878 __media_svc_column_free(col_ptr);
881 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_STORAGE]);
883 for (i = 1; i < len; i++) {
884 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_STORAGE], i);
885 __media_svc_column_free(col_ptr);
888 for (i = 0; i < MEDIA_SVC_DB_LIST_MAX; i++)
889 g_slist_free(column_list[i]);
893 static int __media_svc_db_upgrade(sqlite3 *db_handle, int cur_version, uid_t uid)
895 int ret = MS_MEDIA_ERR_NONE;
898 media_svc_debug_fenter();
900 ret = _media_svc_init_table_query(MEDIA_SVC_DB_TABLE_MEDIA);
901 if (ret != MS_MEDIA_ERR_NONE) {
902 media_svc_error("Query initialization failed");
906 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_LIST_MEDIA, uid);
907 if (ret != MS_MEDIA_ERR_NONE) {
908 media_svc_error("_media_svc_upgrade_table_query failed");
912 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_LIST_PLAYLIST_MAP, uid);
913 if (ret != MS_MEDIA_ERR_NONE) {
914 media_svc_error("_media_svc_upgrade_table_query failed");
918 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_PLAYLIST, MEDIA_SVC_DB_LIST_PLAYLIST, uid);
919 if (ret != MS_MEDIA_ERR_NONE) {
920 media_svc_error("_media_svc_upgrade_table_query failed");
924 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_LIST_ALBUM, uid);
925 if (ret != MS_MEDIA_ERR_NONE) {
926 media_svc_error("_media_svc_upgrade_table_query failed");
930 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_LIST_TAG_MAP, uid);
931 if (ret != MS_MEDIA_ERR_NONE) {
932 media_svc_error("_media_svc_upgrade_table_query failed");
936 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_TAG, MEDIA_SVC_DB_LIST_TAG, uid);
937 if (ret != MS_MEDIA_ERR_NONE) {
938 media_svc_error("_media_svc_upgrade_table_query failed");
942 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_LIST_BOOKMARK, uid);
943 if (ret != MS_MEDIA_ERR_NONE) {
944 media_svc_error("_media_svc_upgrade_table_query failed");
948 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_LIST_STORAGE, uid);
949 if (ret != MS_MEDIA_ERR_NONE) {
950 media_svc_error("_media_svc_upgrade_table_query failed");
954 /* Upgrade issue tizen 4.0 to 5.5 */
955 if (cur_version == USER_V6) {
957 sql = sqlite3_mprintf("DROP VIEW IF EXISTS %q;DROP VIEW IF EXISTS %q;DROP VIEW IF EXISTS %q",
958 MEDIA_SVC_DB_VIEW_PLAYLIST, MEDIA_SVC_DB_VIEW_TAG, MEDIA_SVC_DB_VIEW_MEDIA);
960 media_svc_error("Query creation failed");
961 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
965 ret = _media_svc_sql_query(sql, uid);
966 SQLITE3_SAFE_FREE(sql);
967 if (ret != MS_MEDIA_ERR_NONE) {
968 media_svc_error("_media_svc_sql_query failed");
972 /******Upgrade Media Table******/
973 /* remove user data columns */
974 sql = sqlite3_mprintf("ALTER TABLE %q RENAME TO %q;", MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_TABLE_TMP_TABLE);
976 media_svc_error("Query creation failed");
977 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
981 ret = _media_svc_sql_query(sql, uid);
982 SQLITE3_SAFE_FREE(sql);
983 if (ret != MS_MEDIA_ERR_NONE) {
984 media_svc_error("_media_svc_sql_query failed");
988 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_LIST_MEDIA, uid);
989 if (ret != MS_MEDIA_ERR_NONE) {
990 media_svc_error("_media_svc_make_table_query failed");
994 sql = sqlite3_mprintf("INSERT INTO %q (media_id, media_path, media_display_name, media_type, media_mime_type, media_size, media_added_time, media_modified_time, folder_id, media_thumbnail_path, media_title, album_id, media_album, media_artist, media_album_artist, media_genre, media_composer, media_year, media_recorded_date, media_copyright, media_track_num, media_description, media_bitrate, media_bitpersample, media_samplerate, media_channel, media_duration, media_longitude, media_latitude, media_altitude, exposure_time, fnumber, iso, model, media_width, media_height, media_datetaken, media_orientation, media_rating, media_favourite, media_is_drm, media_storage_type, media_timeline, sync_status, media_file_name_pinyin, media_title_pinyin, media_album_pinyin, media_artist_pinyin, media_album_artist_pinyin, media_genre_pinyin, media_composer_pinyin, media_copyright_pinyin, media_description_pinyin, age_rating_pinyin, keyword_pinyin, storage_uuid, validity, media_360) \
995 SELECT media_uuid, path, file_name, media_type, mime_type, size, added_time, modified_time, folder_uuid, thumbnail_path, title, album_id, album, artist, album_artist, genre, composer, year, recorded_date, copyright, track_num, description, bitrate, bitpersample, samplerate, channel, duration, longitude, latitude, altitude, exposure_time, fnumber, iso, model, width, height, datetaken, orientation, rating, favourite, is_drm, storage_type, timeline, sync_status, file_name_pinyin, title_pinyin, album_pinyin, artist_pinyin, album_artist_pinyin, genre_pinyin, composer_pinyin, copyright_pinyin, description_pinyin, age_rating_pinyin, keyword_pinyin, storage_uuid, validity, is_360 FROM %q;",
996 MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_TABLE_TMP_TABLE);
998 media_svc_error("Query creation failed");
999 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1003 ret = _media_svc_sql_query(sql, uid);
1004 SQLITE3_SAFE_FREE(sql);
1005 if (ret != MS_MEDIA_ERR_NONE) {
1006 media_svc_error("_media_svc_sql_query failed");
1010 sql = sqlite3_mprintf("DROP TABLE %q;", MEDIA_SVC_DB_TABLE_TMP_TABLE);
1012 media_svc_error("Query creation failed");
1013 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1017 ret = _media_svc_sql_query(sql, uid);
1018 SQLITE3_SAFE_FREE(sql);
1019 if (ret != MS_MEDIA_ERR_NONE) {
1020 media_svc_error("_media_svc_sql_query failed");
1024 /******Upgrade Folder Table******/
1025 /* remove "scan_status" column */
1026 sql = sqlite3_mprintf("ALTER TABLE %q RENAME TO %q;", MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_TMP_TABLE);
1028 media_svc_error("Query creation failed");
1029 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1033 ret = _media_svc_sql_query(sql, uid);
1034 SQLITE3_SAFE_FREE(sql);
1035 if (ret != MS_MEDIA_ERR_NONE) {
1036 media_svc_error("_media_svc_sql_query failed");
1040 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid);
1041 if (ret != MS_MEDIA_ERR_NONE) {
1042 media_svc_error("_media_svc_make_table_query failed");
1046 sql = sqlite3_mprintf("INSERT INTO %q (folder_id, folder_path, folder_name, folder_modified_time, folder_name_pinyin, folder_storage_type, storage_uuid, validity) SELECT folder_uuid, path, name, modified_time, name_pinyin, storage_type, storage_uuid, validity FROM %q;", MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_TMP_TABLE);
1048 media_svc_error("Query creation failed");
1049 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1053 ret = _media_svc_sql_query(sql, uid);
1054 SQLITE3_SAFE_FREE(sql);
1055 if (ret != MS_MEDIA_ERR_NONE) {
1056 media_svc_error("_media_svc_sql_query failed");
1060 sql = sqlite3_mprintf("DROP TABLE %q;", MEDIA_SVC_DB_TABLE_TMP_TABLE);
1062 media_svc_error("Query creation failed");
1063 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1067 ret = _media_svc_sql_query(sql, uid);
1068 SQLITE3_SAFE_FREE(sql);
1069 if (ret != MS_MEDIA_ERR_NONE) {
1070 media_svc_error("_media_svc_sql_query failed");
1074 /******Upgrade Storage Table******/
1075 /* remove "scan_status", "storage_name" column */
1076 sql = sqlite3_mprintf("ALTER TABLE %q RENAME TO %q;", MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_TABLE_TMP_TABLE);
1078 media_svc_error("Query creation failed");
1079 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1083 ret = _media_svc_sql_query(sql, uid);
1084 SQLITE3_SAFE_FREE(sql);
1085 if (ret != MS_MEDIA_ERR_NONE) {
1086 media_svc_error("_media_svc_sql_query failed");
1090 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_LIST_STORAGE, uid);
1091 if (ret != MS_MEDIA_ERR_NONE) {
1092 media_svc_error("_media_svc_make_table_query failed");
1096 sql = sqlite3_mprintf("INSERT INTO %q (storage_id, storage_path, storage_type, validity) SELECT storage_uuid, storage_path, storage_type, validity FROM %q;", MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_TABLE_TMP_TABLE);
1098 media_svc_error("Query creation failed");
1099 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1103 ret = _media_svc_sql_query(sql, uid);
1104 SQLITE3_SAFE_FREE(sql);
1105 if (ret != MS_MEDIA_ERR_NONE) {
1106 media_svc_error("_media_svc_sql_query failed");
1110 sql = sqlite3_mprintf("DROP TABLE %q;", MEDIA_SVC_DB_TABLE_TMP_TABLE);
1112 media_svc_error("Query creation failed");
1113 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1117 ret = _media_svc_sql_query(sql, uid);
1118 SQLITE3_SAFE_FREE(sql);
1119 if (ret != MS_MEDIA_ERR_NONE) {
1120 media_svc_error("_media_svc_sql_query failed");
1124 /******Upgrade face Table******/
1125 /* Change "face_uuid" to "face_id" (face_uuid is TEXT, face_id is INTEGER) */
1126 sql = sqlite3_mprintf("ALTER TABLE %q RENAME TO %q;", MEDIA_SVC_DB_TABLE_FACE, MEDIA_SVC_DB_TABLE_TMP_TABLE);
1128 media_svc_error("Query creation failed");
1129 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1133 ret = _media_svc_sql_query(sql, uid);
1134 SQLITE3_SAFE_FREE(sql);
1135 if (ret != MS_MEDIA_ERR_NONE) {
1136 media_svc_error("_media_svc_sql_query failed");
1140 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FACE, MEDIA_SVC_DB_LIST_FACE, uid);
1141 if (ret != MS_MEDIA_ERR_NONE) {
1142 media_svc_error("_media_svc_make_table_query failed");
1146 sql = sqlite3_mprintf("INSERT INTO %q (media_id, face_rect_x, face_rect_y, face_rect_w, face_rect_h, face_orientation, media_face_tag) SELECT media_uuid, face_rect_x, face_rect_y, face_rect_w, face_rect_h, orientation, face_tag FROM %q;", MEDIA_SVC_DB_TABLE_FACE, MEDIA_SVC_DB_TABLE_TMP_TABLE);
1148 media_svc_error("Query creation failed");
1149 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1153 ret = _media_svc_sql_query(sql, uid);
1154 SQLITE3_SAFE_FREE(sql);
1155 if (ret != MS_MEDIA_ERR_NONE) {
1156 media_svc_error("_media_svc_sql_query failed");
1160 sql = sqlite3_mprintf("DROP TABLE %q;", MEDIA_SVC_DB_TABLE_TMP_TABLE);
1162 media_svc_error("Query creation failed");
1163 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1167 ret = _media_svc_sql_query(sql, uid);
1168 SQLITE3_SAFE_FREE(sql);
1169 if (ret != MS_MEDIA_ERR_NONE) {
1170 media_svc_error("_media_svc_sql_query failed");
1174 /******Upgrade face_scan_list Table******/
1175 /* Drop trigger first */
1176 sql = sqlite3_mprintf("DROP TRIGGER IF EXISTS %q_%q;DROP TRIGGER IF EXISTS %q_%q;",
1177 MEDIA_SVC_DB_TRIGGER_FACE, MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TRIGGER_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_MEDIA);
1179 media_svc_error("Query creation failed");
1180 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1184 ret = _media_svc_sql_query(sql, uid);
1185 SQLITE3_SAFE_FREE(sql);
1186 if (ret != MS_MEDIA_ERR_NONE) {
1187 media_svc_error("_media_svc_sql_query failed");
1191 /* remove "storage_uuid" column */
1192 sql = sqlite3_mprintf("ALTER TABLE %q RENAME TO %q;", MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_TMP_TABLE);
1194 media_svc_error("Query creation failed");
1195 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1199 ret = _media_svc_sql_query(sql, uid);
1200 SQLITE3_SAFE_FREE(sql);
1201 if (ret != MS_MEDIA_ERR_NONE) {
1202 media_svc_error("_media_svc_sql_query failed");
1206 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_LIST_FACE_SCAN_LIST, uid);
1207 if (ret != MS_MEDIA_ERR_NONE) {
1208 media_svc_error("_media_svc_make_table_query failed");
1212 sql = sqlite3_mprintf("INSERT INTO %q (media_id, modified_time) SELECT media_uuid, modified_time FROM %q;", MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_TMP_TABLE);
1214 media_svc_error("Query creation failed");
1215 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1219 ret = _media_svc_sql_query(sql, uid);
1220 SQLITE3_SAFE_FREE(sql);
1221 if (ret != MS_MEDIA_ERR_NONE) {
1222 media_svc_error("_media_svc_sql_query failed");
1226 sql = sqlite3_mprintf("DROP TABLE %q;", MEDIA_SVC_DB_TABLE_TMP_TABLE);
1228 media_svc_error("Query creation failed");
1229 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1233 ret = _media_svc_sql_query(sql, uid);
1234 SQLITE3_SAFE_FREE(sql);
1235 if (ret != MS_MEDIA_ERR_NONE) {
1236 media_svc_error("_media_svc_sql_query failed");
1241 /* Upgrade issue tizen 5.0 to 5.5 */
1242 if (cur_version < USER_V8) {
1244 sql = sqlite3_mprintf("DROP VIEW IF EXISTS %q;DROP VIEW IF EXISTS %q;DROP VIEW IF EXISTS %q",
1245 MEDIA_SVC_DB_VIEW_PLAYLIST, MEDIA_SVC_DB_VIEW_TAG, MEDIA_SVC_DB_VIEW_MEDIA);
1247 media_svc_error("Query creation failed");
1248 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1252 ret = _media_svc_sql_query(sql, uid);
1253 SQLITE3_SAFE_FREE(sql);
1254 if (ret != MS_MEDIA_ERR_NONE) {
1255 media_svc_error("_media_svc_sql_query failed");
1258 if (cur_version == USER_V6) {
1259 /* Drop trigger first */
1260 sql = sqlite3_mprintf("DROP TRIGGER IF EXISTS %q_%q;DROP TRIGGER IF EXISTS %q_%q;",
1261 MEDIA_SVC_DB_TRIGGER_FACE, MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TRIGGER_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_MEDIA);
1263 media_svc_error("Query creation failed");
1264 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1268 ret = _media_svc_sql_query(sql, uid);
1269 SQLITE3_SAFE_FREE(sql);
1270 if (ret != MS_MEDIA_ERR_NONE) {
1271 media_svc_error("_media_svc_sql_query failed");
1277 sql = sqlite3_mprintf("ALTER TABLE %q RENAME COLUMN play_order TO playlist_member_order;\
1278 ALTER TABLE %q RENAME COLUMN name TO playlist_name;\
1279 ALTER TABLE %q RENAME COLUMN media_uuid TO media_id;",
1280 MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_TABLE_PLAYLIST, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP);
1282 media_svc_error("Query creation failed");
1283 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1287 ret = _media_svc_sql_query(sql, uid);
1288 SQLITE3_SAFE_FREE(sql);
1289 if (ret != MS_MEDIA_ERR_NONE) {
1290 media_svc_error("_media_svc_sql_query failed");
1295 sql = sqlite3_mprintf("ALTER TABLE %q RENAME COLUMN name TO tag_name;\
1296 ALTER TABLE %q RENAME COLUMN media_uuid TO media_id;",
1297 MEDIA_SVC_DB_TABLE_TAG, MEDIA_SVC_DB_TABLE_TAG_MAP);
1299 media_svc_error("Query creation failed");
1300 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1304 ret = _media_svc_sql_query(sql, uid);
1305 SQLITE3_SAFE_FREE(sql);
1306 if (ret != MS_MEDIA_ERR_NONE) {
1307 media_svc_error("_media_svc_sql_query failed");
1312 sql = sqlite3_mprintf("ALTER TABLE %q RENAME COLUMN marked_time TO bookmark_marked_time;\
1313 ALTER TABLE %q RENAME COLUMN name TO bookmark_name;\
1314 ALTER TABLE %q RENAME COLUMN thumbnail_path TO bookmark_thumbnail_path;\
1315 ALTER TABLE %q RENAME COLUMN media_uuid TO media_id;",
1316 MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_TABLE_BOOKMARK,
1317 MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_TABLE_BOOKMARK);
1319 media_svc_error("Query creation failed");
1320 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1324 ret = _media_svc_sql_query(sql, uid);
1325 SQLITE3_SAFE_FREE(sql);
1326 if (ret != MS_MEDIA_ERR_NONE) {
1327 media_svc_error("_media_svc_sql_query failed");
1332 if (cur_version == USER_V7) {
1334 sql = sqlite3_mprintf("ALTER TABLE %q RENAME COLUMN face_id TO media_face_id;\
1335 ALTER TABLE %q RENAME COLUMN orientation TO face_orientation;\
1336 ALTER TABLE %q RENAME COLUMN face_tag TO media_face_tag;\
1337 ALTER TABLE %q RENAME COLUMN media_uuid TO media_id;\
1338 ALTER TABLE %q RENAME COLUMN media_uuid TO media_id;",
1339 MEDIA_SVC_DB_TABLE_FACE, MEDIA_SVC_DB_TABLE_FACE, MEDIA_SVC_DB_TABLE_FACE,
1340 MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_FACE);
1342 media_svc_error("Query creation failed");
1343 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1347 ret = _media_svc_sql_query(sql, uid);
1348 SQLITE3_SAFE_FREE(sql);
1349 if (ret != MS_MEDIA_ERR_NONE) {
1350 media_svc_error("_media_svc_sql_query failed");
1355 sql = sqlite3_mprintf("ALTER TABLE %q RENAME COLUMN modified_time TO folder_modified_time;\
1356 ALTER TABLE %q RENAME COLUMN path TO folder_path;\
1357 ALTER TABLE %q RENAME COLUMN name TO folder_name;\
1358 ALTER TABLE %q RENAME COLUMN name_pinyin TO folder_name_pinyin;\
1359 ALTER TABLE %q RENAME COLUMN storage_type TO folder_storage_type;\
1360 ALTER TABLE %q RENAME COLUMN folder_uuid TO folder_id;",
1361 MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_FOLDER,
1362 MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_FOLDER);
1364 media_svc_error("Query creation failed");
1365 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1369 ret = _media_svc_sql_query(sql, uid);
1370 SQLITE3_SAFE_FREE(sql);
1371 if (ret != MS_MEDIA_ERR_NONE) {
1372 media_svc_error("_media_svc_sql_query failed");
1377 sql = sqlite3_mprintf("ALTER TABLE %q RENAME COLUMN storage_uuid TO storage_id;",
1378 MEDIA_SVC_DB_TABLE_STORAGE);
1380 media_svc_error("Query creation failed");
1381 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1385 ret = _media_svc_sql_query(sql, uid);
1386 SQLITE3_SAFE_FREE(sql);
1387 if (ret != MS_MEDIA_ERR_NONE) {
1388 media_svc_error("_media_svc_sql_query failed");
1393 sql = sqlite3_mprintf("ALTER TABLE %q RENAME COLUMN file_name_pinyin TO media_file_name_pinyin;\
1394 ALTER TABLE %q RENAME COLUMN title_pinyin TO media_title_pinyin;\
1395 ALTER TABLE %q RENAME COLUMN album_pinyin TO media_album_pinyin;\
1396 ALTER TABLE %q RENAME COLUMN artist_pinyin TO media_artist_pinyin;\
1397 ALTER TABLE %q RENAME COLUMN album_artist_pinyin TO media_album_artist_pinyin;\
1398 ALTER TABLE %q RENAME COLUMN genre_pinyin TO media_genre_pinyin;\
1399 ALTER TABLE %q RENAME COLUMN composer_pinyin TO media_composer_pinyin;\
1400 ALTER TABLE %q RENAME COLUMN copyright_pinyin TO media_copyright_pinyin;\
1401 ALTER TABLE %q RENAME COLUMN description_pinyin TO media_description_pinyin;\
1402 ALTER TABLE %q RENAME COLUMN folder_uuid TO folder_id;\
1403 ALTER TABLE %q RENAME COLUMN media_uuid TO media_id;\
1404 ALTER TABLE %q RENAME COLUMN path TO media_path;\
1405 ALTER TABLE %q RENAME COLUMN file_name TO media_display_name;\
1406 ALTER TABLE %q RENAME COLUMN mime_type TO media_mime_type;\
1407 ALTER TABLE %q RENAME COLUMN size TO media_size;\
1408 ALTER TABLE %q RENAME COLUMN added_time TO media_added_time;\
1409 ALTER TABLE %q RENAME COLUMN modified_time TO media_modified_time;\
1410 ALTER TABLE %q RENAME COLUMN thumbnail_path TO media_thumbnail_path;\
1411 ALTER TABLE %q RENAME COLUMN title TO media_title;\
1412 ALTER TABLE %q RENAME COLUMN album TO media_album;\
1413 ALTER TABLE %q RENAME COLUMN artist TO media_artist;\
1414 ALTER TABLE %q RENAME COLUMN album_artist TO media_album_artist;\
1415 ALTER TABLE %q RENAME COLUMN genre TO media_genre;\
1416 ALTER TABLE %q RENAME COLUMN composer TO media_composer;\
1417 ALTER TABLE %q RENAME COLUMN year TO media_year;\
1418 ALTER TABLE %q RENAME COLUMN recorded_date TO media_recorded_date;\
1419 ALTER TABLE %q RENAME COLUMN copyright TO media_copyright;\
1420 ALTER TABLE %q RENAME COLUMN track_num TO media_track_num;\
1421 ALTER TABLE %q RENAME COLUMN description TO media_description;\
1422 ALTER TABLE %q RENAME COLUMN bitrate TO media_bitrate;\
1423 ALTER TABLE %q RENAME COLUMN bitpersample TO media_bitpersample;\
1424 ALTER TABLE %q RENAME COLUMN samplerate TO media_samplerate;\
1425 ALTER TABLE %q RENAME COLUMN channel TO media_channel;\
1426 ALTER TABLE %q RENAME COLUMN duration TO media_duration;\
1427 ALTER TABLE %q RENAME COLUMN longitude TO media_longitude;\
1428 ALTER TABLE %q RENAME COLUMN latitude TO media_latitude;\
1429 ALTER TABLE %q RENAME COLUMN altitude TO media_altitude;\
1430 ALTER TABLE %q RENAME COLUMN width TO media_width;\
1431 ALTER TABLE %q RENAME COLUMN height TO media_height;\
1432 ALTER TABLE %q RENAME COLUMN datetaken TO media_datetaken;\
1433 ALTER TABLE %q RENAME COLUMN orientation TO media_orientation;\
1434 ALTER TABLE %q RENAME COLUMN rating TO media_rating;\
1435 ALTER TABLE %q RENAME COLUMN favourite TO media_favourite;\
1436 ALTER TABLE %q RENAME COLUMN is_drm TO media_is_drm;\
1437 ALTER TABLE %q RENAME COLUMN storage_type TO media_storage_type;\
1438 ALTER TABLE %q RENAME COLUMN timeline TO media_timeline;\
1439 ALTER TABLE %q RENAME COLUMN is_360 TO media_360;",
1440 MEDIA_SVC_DB_TABLE_MEDIA,
1441 MEDIA_SVC_DB_TABLE_MEDIA,
1442 MEDIA_SVC_DB_TABLE_MEDIA,
1443 MEDIA_SVC_DB_TABLE_MEDIA,
1444 MEDIA_SVC_DB_TABLE_MEDIA,
1445 MEDIA_SVC_DB_TABLE_MEDIA,
1446 MEDIA_SVC_DB_TABLE_MEDIA,
1447 MEDIA_SVC_DB_TABLE_MEDIA,
1448 MEDIA_SVC_DB_TABLE_MEDIA,
1449 MEDIA_SVC_DB_TABLE_MEDIA,
1450 MEDIA_SVC_DB_TABLE_MEDIA,
1451 MEDIA_SVC_DB_TABLE_MEDIA,
1452 MEDIA_SVC_DB_TABLE_MEDIA,
1453 MEDIA_SVC_DB_TABLE_MEDIA,
1454 MEDIA_SVC_DB_TABLE_MEDIA,
1455 MEDIA_SVC_DB_TABLE_MEDIA,
1456 MEDIA_SVC_DB_TABLE_MEDIA,
1457 MEDIA_SVC_DB_TABLE_MEDIA,
1458 MEDIA_SVC_DB_TABLE_MEDIA,
1459 MEDIA_SVC_DB_TABLE_MEDIA,
1460 MEDIA_SVC_DB_TABLE_MEDIA,
1461 MEDIA_SVC_DB_TABLE_MEDIA,
1462 MEDIA_SVC_DB_TABLE_MEDIA,
1463 MEDIA_SVC_DB_TABLE_MEDIA,
1464 MEDIA_SVC_DB_TABLE_MEDIA,
1465 MEDIA_SVC_DB_TABLE_MEDIA,
1466 MEDIA_SVC_DB_TABLE_MEDIA,
1467 MEDIA_SVC_DB_TABLE_MEDIA,
1468 MEDIA_SVC_DB_TABLE_MEDIA,
1469 MEDIA_SVC_DB_TABLE_MEDIA,
1470 MEDIA_SVC_DB_TABLE_MEDIA,
1471 MEDIA_SVC_DB_TABLE_MEDIA,
1472 MEDIA_SVC_DB_TABLE_MEDIA,
1473 MEDIA_SVC_DB_TABLE_MEDIA,
1474 MEDIA_SVC_DB_TABLE_MEDIA,
1475 MEDIA_SVC_DB_TABLE_MEDIA,
1476 MEDIA_SVC_DB_TABLE_MEDIA,
1477 MEDIA_SVC_DB_TABLE_MEDIA,
1478 MEDIA_SVC_DB_TABLE_MEDIA,
1479 MEDIA_SVC_DB_TABLE_MEDIA,
1480 MEDIA_SVC_DB_TABLE_MEDIA,
1481 MEDIA_SVC_DB_TABLE_MEDIA,
1482 MEDIA_SVC_DB_TABLE_MEDIA,
1483 MEDIA_SVC_DB_TABLE_MEDIA,
1484 MEDIA_SVC_DB_TABLE_MEDIA,
1485 MEDIA_SVC_DB_TABLE_MEDIA,
1486 MEDIA_SVC_DB_TABLE_MEDIA);
1488 media_svc_error("Query creation failed");
1489 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1493 ret = _media_svc_sql_query(sql, uid);
1494 SQLITE3_SAFE_FREE(sql);
1495 if (ret != MS_MEDIA_ERR_NONE) {
1496 media_svc_error("_media_svc_sql_query failed");
1502 if (cur_version == USER_V6) {
1503 /* Create the removed trigger */
1504 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TRIGGER, "face_cleanup_face_scan_list", MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_FACE, "media_id", "media_id");
1506 media_svc_error("Query creation failed");
1507 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1511 ret = _media_svc_sql_query(sql, uid);
1512 SQLITE3_SAFE_FREE(sql);
1513 if (ret != MS_MEDIA_ERR_NONE) {
1514 media_svc_error("_media_svc_sql_query failed");
1518 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TRIGGER, "face_scan_list_cleanup_media", MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, "media_id", "media_id");
1520 media_svc_error("Query creation failed");
1521 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1525 ret = _media_svc_sql_query(sql, uid);
1526 SQLITE3_SAFE_FREE(sql);
1527 if (ret != MS_MEDIA_ERR_NONE) {
1528 media_svc_error("_media_svc_sql_query failed");
1533 /* Rebuilding view */
1534 ret = __media_svc_rebuild_view_query(db_handle, uid);
1536 /* Update user version */
1537 sql = sqlite3_mprintf("PRAGMA user_version=%d;", LATEST_VERSION_NUMBER);
1539 media_svc_error("Query creation failed");
1540 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1544 ret = _media_svc_sql_query(sql, uid);
1545 SQLITE3_SAFE_FREE(sql);
1547 _media_svc_destroy_table_query();
1549 media_svc_debug_fleave();
1554 _media_svc_destroy_table_query();
1559 int _media_svc_sql_query(const char *sql_str, uid_t uid)
1561 return media_db_request_update_db(sql_str, uid);
1564 int _media_svc_sql_query_direct(const char *sql_str, uid_t uid)
1566 int ret = MS_MEDIA_ERR_NONE;
1567 sqlite3 *handle = NULL;
1569 ret = media_db_connect(&handle, uid, true);
1570 media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed");
1571 ret = __media_svc_query_direct(handle, sql_str, uid);
1572 media_db_disconnect(handle);
1577 int _media_svc_get_user_version(sqlite3 *db_handle, int *user_version)
1579 int ret = MS_MEDIA_ERR_NONE;
1580 sqlite3_stmt *sql_stmt = NULL;
1581 char *sql = sqlite3_mprintf("PRAGMA user_version;");
1583 ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
1584 if (ret != MS_MEDIA_ERR_NONE) {
1585 media_svc_error("error when get user_version.");
1589 *user_version = sqlite3_column_int(sql_stmt, 0);
1590 SQLITE3_FINALIZE(sql_stmt);
1592 return MS_MEDIA_ERR_NONE;
1595 int _media_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, sqlite3_stmt **stmt)
1599 media_svc_retvm_if(sql_str == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "invalid query");
1601 if (handle == NULL) {
1602 media_svc_error("handle is NULL");
1603 sqlite3_free((char *)sql_str);
1604 return MS_MEDIA_ERR_INVALID_PARAMETER;
1607 media_svc_sec_debug("Query[%s]", sql_str);
1609 err = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL);
1610 sqlite3_free((char *)sql_str);
1612 if (err != SQLITE_OK) {
1613 media_svc_error("prepare error %d[%s]", err, sqlite3_errmsg(handle));
1614 if (err == SQLITE_CORRUPT)
1615 return MS_MEDIA_ERR_DB_CORRUPT;
1616 else if (err == SQLITE_PERM)
1617 return MS_MEDIA_ERR_DB_PERMISSION;
1619 return MS_MEDIA_ERR_DB_INTERNAL;
1622 err = sqlite3_step(*stmt);
1623 if (err != SQLITE_ROW) {
1624 media_svc_debug("No record");
1625 SQLITE3_FINALIZE(*stmt);
1626 return MS_MEDIA_ERR_DB_NO_RECORD;
1629 return MS_MEDIA_ERR_NONE;
1632 int _media_svc_sql_prepare_to_step_simple(sqlite3 *handle, const char *sql_str, sqlite3_stmt **stmt)
1636 media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "handle is NULL");
1638 media_svc_sec_debug("Query[%s]", sql_str);
1640 if (!STRING_VALID(sql_str)) {
1641 media_svc_error("invalid query");
1642 return MS_MEDIA_ERR_INVALID_PARAMETER;
1645 err = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL);
1646 sqlite3_free((char *)sql_str);
1648 if (err != SQLITE_OK) {
1649 media_svc_error("prepare error %d[%s]", err, sqlite3_errmsg(handle));
1650 if (err == SQLITE_CORRUPT)
1651 return MS_MEDIA_ERR_DB_CORRUPT;
1652 else if (err == SQLITE_PERM)
1653 return MS_MEDIA_ERR_DB_PERMISSION;
1655 return MS_MEDIA_ERR_DB_INTERNAL;
1658 return MS_MEDIA_ERR_NONE;
1661 int _media_svc_sql_begin_trans(uid_t uid)
1663 int ret = MS_MEDIA_ERR_NONE;
1665 media_svc_debug("Batch start(Transaction block version)");
1667 ret = media_db_request_update_db_batch_start("BEGIN IMMEDIATE;", uid);
1672 int _media_svc_sql_end_trans(uid_t uid)
1674 int ret = MS_MEDIA_ERR_NONE;
1676 media_svc_debug("Batch end(Transaction block version)");
1678 ret = media_db_request_update_db_batch_end("COMMIT;", uid);
1683 int _media_svc_sql_query_list(GList **query_list, uid_t uid)
1685 int ret = MS_MEDIA_ERR_NONE;
1687 int length = g_list_length(*query_list);
1689 char query_bundle[MEDIA_SVC_QUERY_LEN_MAX] = {0, };
1693 media_svc_debug("query list length : [%d]", length);
1695 memset(query_bundle, 0, sizeof(query_bundle));
1697 for (idx = 0; idx < length; idx++) {
1698 sql = (char *)g_list_nth_data(*query_list, idx);
1699 if (STRING_VALID(sql)) {
1700 query_len = strlen(sql);
1702 if (query_len >= (sizeof(query_bundle) - 1)) {
1703 media_svc_error("NEED TO CHECK FILE : A single query size exceeds 8k [%d]", query_len);
1704 SQLITE3_SAFE_FREE(sql);
1708 if ((total_len + query_len) >= (sizeof(query_bundle) - 1)) {
1709 ret = media_db_request_update_db_batch(query_bundle, uid);
1710 if (ret != MS_MEDIA_ERR_NONE)
1711 media_svc_error("media_db_request_update_db_batch failed : %d", ret);
1713 memset(query_bundle, 0, sizeof(query_bundle));
1715 /* NEED TO CHECK : If a single query size is over 8K, drop it. */
1716 /* Consider inserting the basic information without metadata */
1717 /* Refer : SQLITE3 spec In Tizen 3.0 */
1718 /* Single query limit size = 1 billion bytes(1GiB) */
1719 /* DB limit size = 1 billion bytes(1GiB) */
1720 /* column limit = 2000 */
1723 SAFE_STRLCAT(query_bundle, sql, sizeof(query_bundle));
1724 total_len += query_len;
1726 SQLITE3_SAFE_FREE(sql);
1730 if (total_len > 0) {
1731 ret = media_db_request_update_db_batch(query_bundle, uid);
1732 if (ret != MS_MEDIA_ERR_NONE)
1733 media_svc_error("media_db_request_update_db_batch failed : %d", ret);
1735 memset(query_bundle, 0, sizeof(query_bundle));
1739 _media_svc_sql_query_release(query_list);
1741 return MS_MEDIA_ERR_NONE;
1746 #define SLEEP_TIME 1000 * 1000
1747 static int __media_svc_query_direct(sqlite3 *handle, const char *query, uid_t uid)
1749 int ret = MS_MEDIA_ERR_NONE;
1750 char *zErrMsg = NULL;
1751 int retry_count = 0;
1754 ret = sqlite3_exec(handle, query, NULL, NULL, &zErrMsg);
1755 if (SQLITE_OK != ret) {
1756 media_svc_sec_error("Error[%s],Query[%s]", zErrMsg, query);
1757 SQLITE3_SAFE_FREE(zErrMsg);
1758 if (ret == SQLITE_BUSY) {
1759 ret = MS_MEDIA_ERR_DB_BUSY_FAIL;
1760 } else if (ret == SQLITE_CONSTRAINT) {
1761 ret = MS_MEDIA_ERR_DB_CONSTRAINT_FAIL;
1762 } else if (ret == SQLITE_FULL) {
1763 ret = MS_MEDIA_ERR_DB_FULL_FAIL;
1764 } else if (ret == SQLITE_LOCKED) {
1765 if (retry_count < MAX_RETRY) {
1766 media_svc_error("Locked retry[%d]", retry_count);
1771 ret = MS_MEDIA_ERR_DB_UPDATE_FAIL;
1773 ret = MS_MEDIA_ERR_DB_UPDATE_FAIL;
1780 int _media_svc_sql_query_list_direct(GList **query_list, uid_t uid)
1782 int ret = MS_MEDIA_ERR_NONE;
1784 int length = g_list_length(*query_list);
1786 sqlite3 *handle = NULL;
1788 media_svc_debug("query list length[%d]", length);
1792 ret = media_db_connect(&handle, uid, true);
1793 media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed");
1795 for (idx = 0; idx < length; idx++) {
1796 sql = (char *)g_list_nth_data(*query_list, idx);
1797 if (STRING_VALID(sql)) {
1798 ret = __media_svc_query_direct(handle, sql, uid);
1799 if (ret != MS_MEDIA_ERR_NONE)
1800 media_svc_debug("_media_svc_query_direct failed[%s]", sql);
1802 SQLITE3_SAFE_FREE(sql);
1806 media_db_disconnect(handle);
1809 _media_svc_sql_query_release(query_list);
1811 return MS_MEDIA_ERR_NONE;
1814 void _media_svc_sql_query_add(GList **query_list, char **query)
1816 *query_list = g_list_append(*query_list, *query);
1819 void _media_svc_sql_query_release(GList **query_list)
1822 g_list_free(*query_list);
1827 int _media_svc_check_db_upgrade(sqlite3 *db_handle, int user_version, uid_t uid)
1829 if (user_version < LATEST_VERSION_NUMBER) {
1830 media_svc_error("Current DB is out of date(%d).. So start to upgrade DB(%d)", user_version, LATEST_VERSION_NUMBER);
1831 return __media_svc_db_upgrade(db_handle, user_version, uid);
1833 return MS_MEDIA_ERR_NONE;
1837 int _media_svc_create_media_table_with_id(const char *table_id, uid_t uid)
1839 int ret = MS_MEDIA_ERR_NONE;
1841 ret = _media_svc_init_table_query(table_id);
1842 if (ret != MS_MEDIA_ERR_NONE) {
1843 media_svc_error("_media_svc_init_table_query failed");
1847 ret = _media_svc_make_table_query(table_id, MEDIA_SVC_DB_LIST_MEDIA, uid);
1848 if (ret != MS_MEDIA_ERR_NONE) {
1849 media_svc_error("_media_svc_make_table_query failed");
1853 /* Add for trigger */
1854 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid);
1855 if (ret != MS_MEDIA_ERR_NONE) {
1856 media_svc_error("_media_svc_make_table_query failed");
1860 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_LIST_PLAYLIST_MAP, uid);
1861 if (ret != MS_MEDIA_ERR_NONE) {
1862 media_svc_error("_media_svc_make_table_query failed");
1866 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_LIST_ALBUM, uid);
1867 if (ret != MS_MEDIA_ERR_NONE) {
1868 media_svc_error("_media_svc_make_table_query failed");
1872 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_LIST_TAG_MAP, uid);
1873 if (ret != MS_MEDIA_ERR_NONE) {
1874 media_svc_error("_media_svc_make_table_query failed");
1878 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_LIST_BOOKMARK, uid);
1879 if (ret != MS_MEDIA_ERR_NONE) {
1880 media_svc_error("_media_svc_make_table_query failed");
1884 _media_svc_destroy_table_query();
1889 _media_svc_destroy_table_query();
1894 int _media_svc_update_media_view(sqlite3 *db_handle, uid_t uid)
1896 int ret = MS_MEDIA_ERR_NONE;
1898 sqlite3_stmt *sql_stmt = NULL;
1901 GList *storage_list = NULL;
1902 char view_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
1903 memset(view_query, 0x00, sizeof(view_query));
1905 snprintf(view_query, sizeof(view_query), "DROP VIEW IF EXISTS %s; CREATE VIEW IF NOT EXISTS %s AS SELECT * from %s ", MEDIA_SVC_DB_VIEW_MEDIA, MEDIA_SVC_DB_VIEW_MEDIA, MEDIA_SVC_DB_TABLE_MEDIA);
1907 /*Select list of storage*/
1908 sql = sqlite3_mprintf("SELECT storage_id FROM '%s' WHERE validity=1", MEDIA_SVC_DB_TABLE_STORAGE);
1909 ret = _media_svc_sql_prepare_to_step_simple(db_handle, sql, &sql_stmt);
1910 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
1912 while (sqlite3_step(sql_stmt) == SQLITE_ROW) {
1913 if (STRING_VALID((const char *)sqlite3_column_text(sql_stmt, 0)))
1914 storage_list = g_list_append(storage_list, strdup((char *)sqlite3_column_text(sql_stmt, 0)));
1916 SQLITE3_FINALIZE(sql_stmt);
1918 if ((storage_list != NULL) && (g_list_length(storage_list) > 0)) {
1919 item_cnt = g_list_length(storage_list);
1921 for (idx = 0; idx < item_cnt; idx++) {
1923 char *storage_id = NULL;
1924 storage_id = g_list_nth_data(storage_list, idx);
1926 if (STRING_VALID(storage_id)) {
1927 /*Select list of storage*/
1928 sql = sqlite3_mprintf("SELECT COUNT(*) FROM SQLITE_MASTER WHERE type='table' and name='%q'", storage_id);
1929 ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
1930 if (ret != MS_MEDIA_ERR_NONE) {
1931 SAFE_FREE(storage_id);
1935 table_cnt = sqlite3_column_int(sql_stmt, 0);
1936 SQLITE3_FINALIZE(sql_stmt);
1938 if (table_cnt > 0) {
1939 char append_query[128] = {0, };
1940 memset(append_query, 0x00, sizeof(append_query));
1941 snprintf(append_query, sizeof(append_query), " UNION SELECT * from '%s'", storage_id);
1942 SAFE_STRLCAT(view_query, append_query, sizeof(view_query));
1944 media_svc_error("media table not exist for storage [%s]", storage_id);
1947 SAFE_FREE(storage_id);
1950 g_list_free(storage_list);
1953 ret = _media_svc_sql_query(view_query, uid);
1954 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);