X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcommon%2Fmedia-svc-db-utils.c;h=500e5e60ddff60d24b9dd78448e6415fe92f38e6;hb=refs%2Fheads%2Ftizen_7.0;hp=3af0983d49c89a05c4342d2769fd57a544548d7c;hpb=bd8197e9fb03c898b3180df53bfb30b64744c9a1;p=platform%2Fcore%2Fmultimedia%2Flibmedia-service.git diff --git a/src/common/media-svc-db-utils.c b/src/common/media-svc-db-utils.c index 3af0983..500e5e6 100755 --- a/src/common/media-svc-db-utils.c +++ b/src/common/media-svc-db-utils.c @@ -30,1303 +30,542 @@ #include "media-util-db.h" #include "media-svc-media.h" -static int __media_svc_db_upgrade(sqlite3 *db_handle, int cur_version, uid_t uid); -static int __media_svc_rebuild_view_query(sqlite3 *db_handle, uid_t uid); - - static GHashTable *table; -static GSList *column_list[MEDIA_SVC_DB_LIST_MAX]; - -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) +static GSList *column_list[DB_LIST_MAX]; + +typedef struct { + char *trigger_name; + char *view_name; + char *event_table; + char *action_table; +} table_info_s; + +typedef struct { + char *name; + char *type; + char *option; + bool is_unique; + bool is_trigger; + bool is_view; +} column_info_s; + +static void __add_table_info(const char *name, + const char *trigger_name, + const char *event_table, + const char *action_table, + const char *view_name) { table_info_s *tbl = NULL; - media_svc_retvm_if(!STRING_VALID(name), MS_MEDIA_ERR_INVALID_PARAMETER, "name is NULL"); + if (!STRING_VALID(name)) + return; if (STRING_VALID(trigger_name)) { - media_svc_retvm_if(!STRING_VALID(event_table), MS_MEDIA_ERR_INVALID_PARAMETER, "event_table is NULL"); - media_svc_retvm_if(!STRING_VALID(action_table), MS_MEDIA_ERR_INVALID_PARAMETER, "action_table is NULL"); + if(!STRING_VALID(event_table) || !STRING_VALID(action_table)) + return; } - tbl = malloc(sizeof(table_info_s)); - if (tbl == NULL) { - media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY"); - return MS_MEDIA_ERR_OUT_OF_MEMORY; - } - - memset(tbl, 0x00, sizeof(table_info_s)); + tbl = g_new0(table_info_s, 1); if (STRING_VALID(trigger_name)) { - tbl->trigger_name = malloc(MEDIA_SVC_PATHNAME_SIZE); - if (tbl->trigger_name == NULL) { - media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY"); - SAFE_FREE(tbl); - return MS_MEDIA_ERR_OUT_OF_MEMORY; - } - - memset(tbl->trigger_name, 0x00, MEDIA_SVC_PATHNAME_SIZE); - snprintf(tbl->trigger_name, MEDIA_SVC_PATHNAME_SIZE, "%s_%s", trigger_name, event_table); - - tbl->event_table = strndup(event_table, strlen(event_table)); - tbl->action_table = strndup(action_table, strlen(action_table)); + tbl->trigger_name = g_strdup(trigger_name); + tbl->event_table = g_strdup(event_table); + tbl->action_table = g_strdup(action_table); } if (STRING_VALID(view_name)) - tbl->view_name = strndup(view_name, strlen(view_name)); + tbl->view_name = g_strdup(view_name); g_hash_table_insert(table, (gpointer)name, (gpointer)tbl); - - return MS_MEDIA_ERR_NONE; } -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) +static void __add_column_info(GSList **slist, + const char *name, + const char *type, + const char *option, + bool is_unique, + bool is_trigger, + bool is_view) { - column_info_s *col = NULL; - col = malloc(sizeof(column_info_s)); - if (col == NULL) { - media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY"); - return MS_MEDIA_ERR_OUT_OF_MEMORY; - } - memset(col, 0, sizeof(column_info_s)); + column_info_s *col = g_new0(column_info_s, 1); + + col->name = g_strdup(name); + col->type = g_strdup(type); + col->option = g_strdup(option); - col->name = strndup(name, strlen(name)); - col->type = strndup(type, strlen(type)); - if (option != NULL) { - col->has_option = true; - col->option = strndup(option, strlen(option)); - } else { - col->has_option = false; - } - col->version = version; - if (index_name != NULL) { - col->is_index = true; - col->index_name = strndup(index_name, strlen(index_name)); - } else { - col->is_index = false; - } col->is_unique = is_unique; col->is_trigger = is_trigger; col->is_view = is_view; - *slist = g_slist_append(*slist, col); - return MS_MEDIA_ERR_NONE; + *slist = g_slist_append(*slist, col); } -static int __media_svc_rebuild_view_query(sqlite3 *db_handle, uid_t uid) +static int __create_playlist_view(uid_t uid) { int ret = MS_MEDIA_ERR_NONE; + GSList *iter = NULL; column_info_s *col_ptr = NULL; char *sql = NULL; - char table_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, }; - char temp[1024] = {0, }; - bool sflag = false; - int i, len; - /*media */ - _media_svc_update_media_view(db_handle, uid); - - /*drop playlist_view, tag_view */ - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_DROP_VIEW, MEDIA_SVC_DB_VIEW_PLAYLIST); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + GString *table_query = g_string_new(NULL); + media_svc_retvm_if(!table_query, MS_MEDIA_ERR_INTERNAL, "g_string_new failed"); - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_DROP_VIEW, MEDIA_SVC_DB_VIEW_TAG); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + for (iter = column_list[DB_LIST_PLAYLIST]; iter; iter = g_slist_next(iter)) { + col_ptr = iter->data; + + if (!col_ptr) + continue; - /*create playlist_view */ - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i); if (col_ptr->is_view) { - if (sflag == true) { - if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_THUMBNAIL, strlen(MEDIA_SVC_DB_COLUMN_THUMBNAIL)) == 0) - snprintf(temp, sizeof(temp), ", playlist.%s AS p_thumbnail_path", col_ptr->name); + if (table_query->len != 0) { + if (strncmp(col_ptr->name, DB_COLUMN_THUMBNAIL, strlen(DB_COLUMN_THUMBNAIL)) == 0) + g_string_append_printf(table_query, ", playlist.%s AS p_thumbnail_path", col_ptr->name); else - snprintf(temp, sizeof(temp), ", playlist.%s", col_ptr->name); + g_string_append_printf(table_query, ", playlist.%s", col_ptr->name); } else { - snprintf(temp, sizeof(temp), "playlist.%s", col_ptr->name); - sflag = true; + g_string_append_printf(table_query, "playlist.%s", col_ptr->name); } - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); } - memset(temp, 0, sizeof(temp)); } - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i); + + for (iter = column_list[DB_LIST_PLAYLIST_MAP]; iter; iter = g_slist_next(iter)) { + col_ptr = iter->data; + + if (!col_ptr) + continue; + if (col_ptr->is_view) { - if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0) - snprintf(temp, sizeof(temp), ", playlist_media_count IS NOT NULL AS playlist_media_count, playlist_map.%s AS pm_id", col_ptr->name); + if (strncmp(col_ptr->name, DB_COLUMN_MAP_ID, strlen(DB_COLUMN_MAP_ID)) == 0) + g_string_append_printf(table_query, ", playlist_media_count IS NOT NULL AS playlist_media_count, playlist_map.%s AS pm_id", col_ptr->name); else - snprintf(temp, sizeof(temp), ", playlist_map.%s", col_ptr->name); - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); + g_string_append_printf(table_query, ", playlist_map.%s", col_ptr->name); } - memset(temp, 0, sizeof(temp)); } - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i); - if (col_ptr->is_view) { - snprintf(temp, sizeof(temp), ", media_view.%s", col_ptr->name); - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); - } - memset(temp, 0, sizeof(temp)); + for (iter = column_list[DB_LIST_MEDIA]; iter; iter = g_slist_next(iter)) { + col_ptr = iter->data; + + if (!col_ptr) + continue; + + if (col_ptr->is_view) + g_string_append_printf(table_query, ", media.%s", col_ptr->name); } - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_PLAYLIST, MEDIA_SVC_DB_VIEW_PLAYLIST, table_query); + + sql = sqlite3_mprintf(DB_QUERY_VIEW_PLAYLIST, DB_VIEW_PLAYLIST, table_query->str); + g_string_free(table_query, TRUE); ret = _media_svc_sql_query(sql, uid); SQLITE3_SAFE_FREE(sql); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - /*create tag_view */ - sflag = false; - memset(table_query, 0, sizeof(table_query)); + return ret; +} + +static int __create_tag_view(uid_t uid) +{ + int ret = MS_MEDIA_ERR_NONE; + GSList *iter = NULL; + column_info_s *col_ptr = NULL; + char *sql = NULL; + GString *table_query = g_string_new(NULL); + media_svc_retvm_if(!table_query, MS_MEDIA_ERR_INTERNAL, "g_string_new failed"); + + for (iter = column_list[DB_LIST_TAG]; iter; iter = g_slist_next(iter)) { + col_ptr = iter->data; + + if (!col_ptr) + continue; - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i); if (col_ptr->is_view) { - if (sflag == true) { - snprintf(temp, sizeof(temp), ", tag.%s", col_ptr->name); - } else { - snprintf(temp, sizeof(temp), "tag.%s", col_ptr->name); - sflag = true; - } - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); + if (table_query->len != 0) + g_string_append_printf(table_query, ", tag.%s", col_ptr->name); + else + g_string_append_printf(table_query, "tag.%s", col_ptr->name); } - memset(temp, 0, sizeof(temp)); } - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i); + + for (iter = column_list[DB_LIST_TAG_MAP]; iter; iter = g_slist_next(iter)) { + col_ptr = iter->data; + + if (!col_ptr) + continue; + if (col_ptr->is_view) { - if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0) - snprintf(temp, sizeof(temp), ", tag_media_count IS NOT NULL AS tag_media_count, tag_map.%s AS tm_id", col_ptr->name); + if (strncmp(col_ptr->name, DB_COLUMN_MAP_ID, strlen(DB_COLUMN_MAP_ID)) == 0) + g_string_append_printf(table_query, ", tag_media_count IS NOT NULL AS tag_media_count, tag_map.%s AS tm_id", col_ptr->name); else - snprintf(temp, sizeof(temp), ", tag_map.%s", col_ptr->name); - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); + g_string_append_printf(table_query, ", tag_map.%s", col_ptr->name); } - memset(temp, 0, sizeof(temp)); } - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i); - if (col_ptr->is_view) { - snprintf(temp, sizeof(temp), ", media_view.%s", col_ptr->name); - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); - } - memset(temp, 0, sizeof(temp)); + for (iter = column_list[DB_LIST_MEDIA]; iter; iter = g_slist_next(iter)) { + col_ptr = iter->data; + + if (!col_ptr) + continue; + + if (col_ptr->is_view) + g_string_append_printf(table_query, ", media.%s", col_ptr->name); } - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_TAG, MEDIA_SVC_DB_VIEW_TAG, table_query); + + sql = sqlite3_mprintf(DB_QUERY_VIEW_TAG, DB_VIEW_TAG, table_query->str); + g_string_free(table_query, TRUE); ret = _media_svc_sql_query(sql, uid); SQLITE3_SAFE_FREE(sql); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - return MS_MEDIA_ERR_NONE; + return ret; } int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e list, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; + GSList *iter = NULL; table_info_s *tb = NULL; column_info_s *col_ptr = NULL; char *sql = NULL; - char table_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, }; - char index_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, }; - char trigger_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, }; - char table_query_sub[1024] = {0, }; - char temp[1024] = {0 ,}; - bool flag = false; - bool sub_flag = false; - int len = 0; - int i = 0; + GString *table_query = g_string_new(NULL); + GString *trigger_query = g_string_new(NULL); + GString *unique_query = g_string_new(NULL); + + if (!table_query || !trigger_query || !unique_query) { + media_svc_error("g_string_new failed"); + ret = MS_MEDIA_ERR_INTERNAL; + goto ERROR; + } tb = g_hash_table_lookup(table, table_name); if (tb == NULL) { media_svc_debug("lookup fail.. table name [%s] ", table_name); - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_MEDIA); + ret = MS_MEDIA_ERR_INTERNAL; + goto ERROR; } - len = g_slist_length(column_list[list]); + for (iter = column_list[list]; iter; iter = g_slist_next(iter)) { + col_ptr = iter->data; + if (!col_ptr) + continue; - if (len == 0) { - media_svc_error("Invalid column"); - return MS_MEDIA_ERR_INTERNAL; - } - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[list], i); /*create table */ - if (col_ptr->has_option) { - if (flag == true) { - snprintf(temp, sizeof(temp), ", %s %s %s", col_ptr->name, col_ptr->type, col_ptr->option); - } else { - snprintf(temp, sizeof(temp), "%s %s %s", col_ptr->name, col_ptr->type, col_ptr->option); - flag = true; - } - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); + if (col_ptr->option) { + if (table_query->len != 0) + g_string_append_printf(table_query, ", %s %s %s", col_ptr->name, col_ptr->type, col_ptr->option); + else + g_string_append_printf(table_query, "%s %s %s", col_ptr->name, col_ptr->type, col_ptr->option); } else { - if (flag == true) { - snprintf(temp, sizeof(temp), ", %s %s", col_ptr->name, col_ptr->type); - } else { - snprintf(temp, sizeof(temp), "%s %s", col_ptr->name, col_ptr->type); - flag = true; - } - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); + if (table_query->len != 0) + g_string_append_printf(table_query, ", %s %s", col_ptr->name, col_ptr->type); + else + g_string_append_printf(table_query, "%s %s", col_ptr->name, col_ptr->type); } - memset(temp, 0, sizeof(temp)); /*unique */ if (col_ptr->is_unique) { - if (sub_flag == true) { - snprintf(temp, sizeof(temp), ", %s", col_ptr->name); - } else { - snprintf(temp, sizeof(temp), "%s", col_ptr->name); - sub_flag = true; - } - SAFE_STRLCAT(table_query_sub, temp, sizeof(table_query_sub)); - } - memset(temp, 0, sizeof(temp)); - - /*create index */ - if (col_ptr->is_index) { - snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_INDEX, col_ptr->index_name, table_name, col_ptr->name); - SAFE_STRLCAT(index_query, temp, sizeof(index_query)); + if (unique_query->len != 0) + g_string_append_printf(unique_query, ", %s", col_ptr->name); + else + g_string_append_printf(unique_query, "%s", col_ptr->name); } - memset(temp, 0, sizeof(temp)); /*create trigger */ if (col_ptr->is_trigger) { if (STRING_VALID(tb->trigger_name)) { - if (strncmp(table_name, MEDIA_SVC_DB_TABLE_ALBUM, strlen(MEDIA_SVC_DB_TABLE_ALBUM)) == 0) - 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); - else - snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_TRIGGER, tb->trigger_name, tb->event_table, tb->action_table, col_ptr->name, col_ptr->name); - - SAFE_STRLCAT(trigger_query, temp, sizeof(trigger_query)); + if (strncmp(table_name, DB_TABLE_ALBUM, strlen(DB_TABLE_ALBUM)) == 0) { + g_string_append_printf(trigger_query, 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); + } else { + g_string_append_printf(trigger_query, DB_QUERY_TRIGGER, + tb->trigger_name, tb->event_table, tb->action_table, + col_ptr->name, col_ptr->name); + } } else { media_svc_error("invalid trigger name"); } } - memset(temp, 0, sizeof(temp)); } /*send queries */ - if (sub_flag == true) { - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TABLE_WITH_UNIQUE, table_name, table_query, table_query_sub); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - memset(table_query, 0, sizeof(table_query)); - memset(table_query_sub, 0, sizeof(table_query_sub)); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - } else { - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TABLE, table_name, table_query); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - memset(table_query, 0, sizeof(table_query)); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - } + if (unique_query->len > 0) + sql = sqlite3_mprintf(DB_QUERY_TABLE_WITH_UNIQUE, table_name, table_query->str, unique_query->str); + else + sql = sqlite3_mprintf(DB_QUERY_TABLE, table_name, table_query->str); - if (STRING_VALID(index_query)) { - ret = _media_svc_sql_query(index_query, uid); - memset(index_query, 0, sizeof(index_query)); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - } + ret = _media_svc_sql_query(sql, uid); + SQLITE3_SAFE_FREE(sql); + if (ret != MS_MEDIA_ERR_NONE) + goto ERROR; - if (STRING_VALID(trigger_query)) { - ret = _media_svc_sql_query(trigger_query, uid); - memset(trigger_query, 0, sizeof(trigger_query)); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + if (trigger_query->len > 0) { + ret = _media_svc_sql_query(trigger_query->str, uid); + if (ret != MS_MEDIA_ERR_NONE) + goto ERROR; } /*create view */ - flag = false; - if (tb != NULL && tb->view_name != NULL) { - if (strncmp(table_name, MEDIA_SVC_DB_TABLE_MEDIA, strlen(MEDIA_SVC_DB_TABLE_MEDIA)) == 0) { - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_MEDIA, tb->view_name, table_name); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - - } else if (strncmp(table_name, MEDIA_SVC_DB_TABLE_PLAYLIST, strlen(MEDIA_SVC_DB_TABLE_PLAYLIST)) == 0) { - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i); - if (col_ptr->is_view) { - if (flag == true) { - if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_THUMBNAIL, strlen(MEDIA_SVC_DB_COLUMN_THUMBNAIL)) == 0) - snprintf(temp, sizeof(temp), ", playlist.%s AS p_thumbnail_path", col_ptr->name); - else - snprintf(temp, sizeof(temp), ", playlist.%s", col_ptr->name); - } else { - snprintf(temp, sizeof(temp), "playlist.%s", col_ptr->name); - flag = true; - } - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); - } - memset(temp, 0, sizeof(temp)); - } - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i); - if (col_ptr->is_view) { - if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0) - snprintf(temp, sizeof(temp), ", playlist_media_count IS NOT NULL AS playlist_media_count, playlist_map.%s AS pm_id", col_ptr->name); - else - snprintf(temp, sizeof(temp), ", playlist_map.%s", col_ptr->name); - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); - } - memset(temp, 0, sizeof(temp)); - } - - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i); - if (col_ptr->is_view) { - snprintf(temp, sizeof(temp), ", media_view.%s", col_ptr->name); - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); - } - memset(temp, 0, sizeof(temp)); - } - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_PLAYLIST, tb->view_name, table_query); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + if (strncmp(table_name, DB_TABLE_PLAYLIST, strlen(DB_TABLE_PLAYLIST)) == 0) + ret = __create_playlist_view(uid); + else if (strncmp(table_name, DB_TABLE_TAG, strlen(DB_TABLE_TAG)) == 0) + ret = __create_tag_view(uid); - } else { - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i); - if (col_ptr->is_view) { - if (flag == true) { - snprintf(temp, sizeof(temp), ", tag.%s", col_ptr->name); - } else { - snprintf(temp, sizeof(temp), "tag.%s", col_ptr->name); - flag = true; - } - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); - } - memset(temp, 0, sizeof(temp)); - } - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i); - if (col_ptr->is_view) { - if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0) - snprintf(temp, sizeof(temp), ", tag_media_count IS NOT NULL AS tag_media_count, tag_map.%s AS tm_id", col_ptr->name); - else - snprintf(temp, sizeof(temp), ", tag_map.%s", col_ptr->name); - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); - } - memset(temp, 0, sizeof(temp)); - } - - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i); - if (col_ptr->is_view) { - snprintf(temp, sizeof(temp), ", media_view.%s", col_ptr->name); - SAFE_STRLCAT(table_query, temp, sizeof(table_query)); - } - memset(temp, 0, sizeof(temp)); - } - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_TAG, tb->view_name, table_query); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - } - } +ERROR: + if (trigger_query) + g_string_free(trigger_query, TRUE); + if (unique_query) + g_string_free(unique_query, TRUE); + if (table_query) + g_string_free(table_query, TRUE); - return MS_MEDIA_ERR_NONE; + return ret; } -int _media_svc_upgrade_table_query(sqlite3 *db_handle, const char *table_name, media_svc_table_slist_e list, uid_t uid) +static void __media_svc_table_free(gpointer data) { - int ret = MS_MEDIA_ERR_NONE; - column_info_s *col_ptr = NULL; - char *sql = NULL; - char temp[1024] = {0, }; - int len, i; - int cur_version = 0; - sqlite3_stmt *sql_stmt = NULL; + table_info_s *tb = (table_info_s *) data; - len = g_slist_length(column_list[list]); - - sql = sqlite3_mprintf("PRAGMA user_version"); - ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt); - - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("error when get user_version. err = [%d]", ret); - return ret; - } - cur_version = sqlite3_column_int(sql_stmt, 0); - SQLITE3_FINALIZE(sql_stmt); + g_free(tb->trigger_name); + g_free(tb->view_name); + g_free(tb->event_table); + g_free(tb->action_table); + g_free(tb); +} - len = g_slist_length(column_list[list]); - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[list], i); - if (col_ptr->version > cur_version) { - /*alter table */ - if (col_ptr->has_option) - snprintf(temp, sizeof(temp), "%s %s %s", col_ptr->name, col_ptr->type, col_ptr->option); - else - snprintf(temp, sizeof(temp), "%s %s", col_ptr->name, col_ptr->type); - sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_ALTER_TABLE, table_name, temp); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - /*create index */ - if (col_ptr->is_index) { - memset(temp, 0, sizeof(temp)); - snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_INDEX, col_ptr->index_name, table_name, col_ptr->name); - ret = _media_svc_sql_query(temp, uid); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - } - } - memset(temp, 0, sizeof(temp)); - } +static void __media_svc_column_free(gpointer data) +{ + column_info_s *col = (column_info_s *) data; - return MS_MEDIA_ERR_NONE; + g_free(col->name); + g_free(col->type); + g_free(col->option); + g_free(col); } -int _media_svc_init_table_query(const char *event_table_name) +int _media_svc_init_table_query(void) { int ret = MS_MEDIA_ERR_NONE; - int i = 0; /*variable initialize.. */ - table = g_hash_table_new(g_str_hash, g_str_equal); - for (i = 0; i < MEDIA_SVC_DB_LIST_MAX; i++) - column_list[i] = g_slist_alloc(); - - /*table specification.. (table_name, index, unique set, trigger, view, trigger name, event table, action table, view name) */ - ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_MEDIA, NULL, NULL, NULL, MEDIA_SVC_DB_VIEW_MEDIA); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_STORAGE, NULL, NULL, NULL, NULL); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + table = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, __media_svc_table_free); + + /*table specification.. (table_name, trigger name, event table, action table, view name) */ + __add_table_info(DB_TABLE_MEDIA, NULL, NULL, NULL, NULL); + __add_table_info(DB_TABLE_FOLDER, NULL, NULL, NULL, NULL); + __add_table_info(DB_TABLE_PLAYLIST_MAP, DB_TRIGGER_PLAYLIST_MAP, DB_TABLE_MEDIA, DB_TABLE_PLAYLIST_MAP, NULL); + __add_table_info(DB_TABLE_PLAYLIST, DB_TRIGGER_PLAYLIST_MAP1, DB_TABLE_PLAYLIST, DB_TABLE_PLAYLIST_MAP, DB_VIEW_PLAYLIST); + __add_table_info(DB_TABLE_ALBUM, DB_TRIGGER_ALBUM, DB_TABLE_MEDIA, DB_TABLE_ALBUM, NULL); + __add_table_info(DB_TABLE_TAG_MAP, DB_TRIGGER_TAG_MAP, DB_TABLE_MEDIA, DB_TABLE_TAG_MAP, NULL); + __add_table_info(DB_TABLE_TAG, DB_TRIGGER_TAG_MAP1, DB_TABLE_TAG, DB_TABLE_TAG_MAP, DB_VIEW_TAG); + __add_table_info(DB_TABLE_BOOKMARK, DB_TRIGGER_BOOKMARK, DB_TABLE_MEDIA, DB_TABLE_BOOKMARK, NULL); + __add_table_info(DB_TABLE_STORAGE, NULL, NULL, NULL, NULL); + __add_table_info(DB_TABLE_FACE_SCAN_LIST, DB_TRIGGER_FACE_SCAN_LIST, DB_TABLE_MEDIA, DB_TABLE_FACE_SCAN_LIST, NULL); + __add_table_info(DB_TABLE_FACE, DB_TRIGGER_FACE, DB_TABLE_FACE_SCAN_LIST, DB_TABLE_FACE, NULL); /*insert column info.. */ /*media*/ - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL UNIQUE", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "file_name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, "media_file_name_idx", false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "mime_type", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "size", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "added_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "modified_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, "media_modified_time_idx", false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "folder_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, "folder_uuid_idx", false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "thumbnail_path", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "title", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "artist", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album_artist", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "genre", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "composer", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "year", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "recorded_date", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "copyright", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "track_num", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "description", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "bitrate", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "bitpersample", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "samplerate", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "channel", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "duration", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "longitude", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "latitude", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "altitude", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "width", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "height", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "datetaken", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "orientation", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "rating", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "favourite", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "is_drm", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "storage_type", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V2, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "timeline", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, "media_timeline_idx", false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "file_name_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "title_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "artist_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album_artist_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "genre_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "composer_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "copyright_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "description_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - /* storage_uuid column is added in DB v4. When doing DB upgrade to v4, if storage_uuid is NOT NULL, alter table failed. */ - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - /* color column is added with dcm. (DB v5) */ - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "is_360", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V5, NULL, false, false, true); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_id", DB_TYPE_TEXT, "PRIMARY KEY", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_path", DB_TYPE_TEXT, "NOT NULL UNIQUE", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_display_name", DB_TYPE_TEXT, "NOT NULL", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_type", DB_TYPE_INT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_mime_type", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_size", DB_TYPE_INT, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_added_time", DB_TYPE_INT, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_modified_time", DB_TYPE_INT, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "folder_id", DB_TYPE_TEXT, "NOT NULL", false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_thumbnail_path", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_title", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "album_id", DB_TYPE_INT, "DEFAULT 0", false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_album", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_artist", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_album_artist", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_genre", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_composer", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_year", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_recorded_date", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_copyright", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_track_num", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_description", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_bitrate", DB_TYPE_INT, "DEFAULT -1", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_bitpersample", DB_TYPE_INT, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_samplerate", DB_TYPE_INT, "DEFAULT -1", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_channel", DB_TYPE_INT, "DEFAULT -1", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_duration", DB_TYPE_INT, "DEFAULT -1", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_longitude", DB_TYPE_DOUBLE, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_latitude", DB_TYPE_DOUBLE, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_altitude", DB_TYPE_DOUBLE, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "exposure_time", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "fnumber", DB_TYPE_DOUBLE, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "iso", DB_TYPE_INT, "DEFAULT -1", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "model", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_width", DB_TYPE_INT, "DEFAULT -1", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_height", DB_TYPE_INT, "DEFAULT -1", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_datetaken", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_orientation", DB_TYPE_INT, "DEFAULT -1", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_rating", DB_TYPE_INT, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_favourite", DB_TYPE_INT, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_is_drm", DB_TYPE_INT, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_storage_type", DB_TYPE_INT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_timeline", DB_TYPE_INT, "DEFAULT 0", false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_file_name_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_title_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_album_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_artist_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_album_artist_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_genre_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_composer_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_copyright_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_description_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "storage_uuid", DB_TYPE_TEXT, NULL, false, false, true); + __add_column_info(&column_list[DB_LIST_MEDIA], "validity", DB_TYPE_INT, "DEFAULT 1", false, false, false); + __add_column_info(&column_list[DB_LIST_MEDIA], "media_360", DB_TYPE_INT, "DEFAULT 0", false, false, true); /*folder*/ - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_uuid", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, true, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "modified_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "name_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "storage_type", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - /* storage_uuid column is added in DB v4. When doing DB upgrade to v4, if storage_uuid is NOT NULL, alter table failed. */ - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_FOLDER], "folder_id", DB_TYPE_TEXT, "PRIMARY KEY", false, false, false); + __add_column_info(&column_list[DB_LIST_FOLDER], "folder_path", DB_TYPE_TEXT, "NOT NULL", true, false, false); + __add_column_info(&column_list[DB_LIST_FOLDER], "folder_name", DB_TYPE_TEXT, "NOT NULL", false, false, false); + __add_column_info(&column_list[DB_LIST_FOLDER], "folder_modified_time", DB_TYPE_INT, "DEFAULT 0", false, false, false); + __add_column_info(&column_list[DB_LIST_FOLDER], "folder_name_pinyin", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_FOLDER], "folder_storage_type", DB_TYPE_INT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_FOLDER], "storage_uuid", DB_TYPE_TEXT, NULL, true, false, false); + __add_column_info(&column_list[DB_LIST_FOLDER], "validity", DB_TYPE_INT, "DEFAULT 1", false, false, false); /*playlist_map*/ - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, false, true, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_PLAYLIST_MAP], "_id", DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", false, false, true); + __add_column_info(&column_list[DB_LIST_PLAYLIST_MAP], "playlist_id", DB_TYPE_INT, "NOT NULL", false, false, false); + __add_column_info(&column_list[DB_LIST_PLAYLIST_MAP], "media_id", DB_TYPE_TEXT, "NOT NULL", false, true, false); + __add_column_info(&column_list[DB_LIST_PLAYLIST_MAP], "playlist_member_order", DB_TYPE_INT, "NOT NULL", false, false, true); /*playlist*/ - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_PLAYLIST], "playlist_id", DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", false, true, true); + __add_column_info(&column_list[DB_LIST_PLAYLIST], "playlist_name", DB_TYPE_TEXT, "NOT NULL UNIQUE", false, false, true); + __add_column_info(&column_list[DB_LIST_PLAYLIST], "thumbnail_path", DB_TYPE_TEXT, NULL, false, false, true); /*album*/ - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_ALBUM], "album_id", DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", false, true, false); + __add_column_info(&column_list[DB_LIST_ALBUM], "name", DB_TYPE_TEXT, "NOT NULL", false, false, false); + __add_column_info(&column_list[DB_LIST_ALBUM], "artist", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_ALBUM], "album_art", DB_TYPE_TEXT, NULL, false, false, false); /*tag_map*/ - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG_MAP], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, true, true, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_TAG_MAP], "_id", DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", false, false, true); + __add_column_info(&column_list[DB_LIST_TAG_MAP], "tag_id", DB_TYPE_INT, "NOT NULL", true, false, false); + __add_column_info(&column_list[DB_LIST_TAG_MAP], "media_id", DB_TYPE_TEXT, "NOT NULL", true, true, false); /*tag*/ - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_TAG], "tag_id ", DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", false, true, true); + __add_column_info(&column_list[DB_LIST_TAG], "tag_name", DB_TYPE_TEXT, "NOT NULL UNIQUE", false, false, true); /*bookmark*/ - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, true, true, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "thumbnail_path", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_BOOKMARK], "bookmark_id", DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", false, false, false); + __add_column_info(&column_list[DB_LIST_BOOKMARK], "media_id", DB_TYPE_TEXT, "NOT NULL", true, true, false); + __add_column_info(&column_list[DB_LIST_BOOKMARK], "bookmark_marked_time", DB_TYPE_INT, "DEFAULT 0", true, false, false); + __add_column_info(&column_list[DB_LIST_BOOKMARK], "bookmark_thumbnail_path", DB_TYPE_TEXT, NULL, false, false, false); + __add_column_info(&column_list[DB_LIST_BOOKMARK], "bookmark_name", DB_TYPE_TEXT, NULL, false, false, false); /*storage*/ - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "storage_uuid", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V3, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_STORAGE], "storage_id", DB_TYPE_TEXT, "PRIMARY KEY", false, false, false); + __add_column_info(&column_list[DB_LIST_STORAGE], "storage_path", DB_TYPE_TEXT, "NOT NULL", false, false, false); + __add_column_info(&column_list[DB_LIST_STORAGE], "storage_type", DB_TYPE_INT, "DEFAULT 0", false, false, false); + __add_column_info(&column_list[DB_LIST_STORAGE], "validity", DB_TYPE_INT, "DEFAULT 1", false, false, false); /*face scan list*/ - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE_SCAN_LIST], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL UNIQUE", USER_V4, NULL, false, true, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_FACE_SCAN_LIST], "media_id", DB_TYPE_TEXT, "NOT NULL UNIQUE", false, true, false); + __add_column_info(&column_list[DB_LIST_FACE_SCAN_LIST], "modified_time", DB_TYPE_INT, "DEFAULT 0", false, false, false); /*face*/ - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V4, NULL, true, true, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "orientation", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - 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); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + __add_column_info(&column_list[DB_LIST_FACE], "media_face_id", DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", false, false, false); + __add_column_info(&column_list[DB_LIST_FACE], "media_id", DB_TYPE_TEXT, "NOT NULL", true, true, false); + __add_column_info(&column_list[DB_LIST_FACE], "face_rect_x", DB_TYPE_INT, "DEFAULT 0", true, false, false); + __add_column_info(&column_list[DB_LIST_FACE], "face_rect_y", DB_TYPE_INT, "DEFAULT 0", true, false, false); + __add_column_info(&column_list[DB_LIST_FACE], "face_rect_w", DB_TYPE_INT, "DEFAULT 0", true, false, false); + __add_column_info(&column_list[DB_LIST_FACE], "face_rect_h", DB_TYPE_INT, "DEFAULT 0", true, false, false); + __add_column_info(&column_list[DB_LIST_FACE], "face_orientation", DB_TYPE_INT, "DEFAULT 0", false, false, false); + __add_column_info(&column_list[DB_LIST_FACE], "media_face_tag", DB_TYPE_TEXT, NULL, false, false, false); return ret; } -void __media_svc_table_free(table_info_s *tb) -{ - SAFE_FREE(tb->trigger_name); - SAFE_FREE(tb->view_name); - SAFE_FREE(tb->event_table); - SAFE_FREE(tb->action_table); - SAFE_FREE(tb); -} - -void __media_svc_column_free(column_info_s *col) -{ - SAFE_FREE(col->name); - SAFE_FREE(col->type); - SAFE_FREE(col->option); - SAFE_FREE(col->index_name); - SAFE_FREE(col); -} -void _media_svc_destroy_table_query() +void _media_svc_destroy_table_query(void) { int i = 0; - table_info_s *tb = NULL; - column_info_s *col_ptr = NULL; - int len = 0; /* Table Free */ - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_MEDIA); - __media_svc_table_free(tb); - g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_MEDIA); - - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_FOLDER); - __media_svc_table_free(tb); - g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_FOLDER); - - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PLAYLIST); - __media_svc_table_free(tb); - g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PLAYLIST); - - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP); - __media_svc_table_free(tb); - g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP); - - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_ALBUM); - __media_svc_table_free(tb); - g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_ALBUM); - - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_TAG); - __media_svc_table_free(tb); - g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_TAG); - - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_TAG_MAP); - __media_svc_table_free(tb); - g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_TAG_MAP); - - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_BOOKMARK); - __media_svc_table_free(tb); - g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_BOOKMARK); - - tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_STORAGE); - __media_svc_table_free(tb); - g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_STORAGE); - g_hash_table_destroy(table); + table = NULL; /* Column Free */ - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]); - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i); - __media_svc_column_free(col_ptr); - } - - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_FOLDER]); - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_FOLDER], i); - __media_svc_column_free(col_ptr); - } - - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]); - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i); - __media_svc_column_free(col_ptr); - } - - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]); - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i); - __media_svc_column_free(col_ptr); - } - - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_ALBUM]); - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_ALBUM], i); - __media_svc_column_free(col_ptr); + for (i = 0; i < DB_LIST_MAX; i++) { + g_slist_free_full(column_list[i], __media_svc_column_free); + column_list[i] = NULL; } +} - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]); - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i); - __media_svc_column_free(col_ptr); - } - - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]); - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i); - __media_svc_column_free(col_ptr); - } - - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_BOOKMARK]); - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_BOOKMARK], i); - __media_svc_column_free(col_ptr); - } - - len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_STORAGE]); - - for (i = 1; i < len; i++) { - col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_STORAGE], i); - __media_svc_column_free(col_ptr); - } - - for (i = 0; i < MEDIA_SVC_DB_LIST_MAX; i++) - g_slist_free(column_list[i]); - +int _media_svc_sql_query(const char *sql_str, uid_t uid) +{ + return media_db_request_update_db(sql_str, uid); } -static int __media_svc_db_upgrade(sqlite3 *db_handle, int cur_version, uid_t uid) +#define MAX_RETRY 9 +#define SLEEP_TIME 1000 * 1000 +static int __media_svc_query_direct(sqlite3 *handle, const char *query, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - char *sql = NULL; - - media_svc_debug_fenter(); - - ret = _media_svc_init_table_query(MEDIA_SVC_DB_TABLE_MEDIA); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("Query initialization failed"); - goto ERROR; - } - - ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_LIST_MEDIA, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_upgrade_table_query failed"); - goto ERROR; - } - - /* Upgrade issue in folder table tizen 2.3(unique:path, name, storage_type) to 2.4(unique:path, name, storage_uuid) */ - if (cur_version < USER_V4) { - /* Create tmp table */ - sql = sqlite3_mprintf("CREATE TABLE '%q' AS SELECT * FROM '%q';", MEDIA_SVC_DB_TABLE_TMP_TABLE, MEDIA_SVC_DB_TABLE_FOLDER); - if (sql == NULL) { - media_svc_error("_media_svc_upgrade_table_query failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - if (ret != MS_MEDIA_ERR_NONE) - media_svc_error("Error when create backup folder table"); - SQLITE3_SAFE_FREE(sql); - - /* Drop original table */ - sql = sqlite3_mprintf("DROP TABLE '%q';", MEDIA_SVC_DB_TABLE_FOLDER); - if (sql == NULL) { - media_svc_error("_media_svc_upgrade_table_query failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - if (ret != MS_MEDIA_ERR_NONE) - media_svc_error("Error when drop table"); - SQLITE3_SAFE_FREE(sql); - - /* Create new table */ - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } - - /* Insert into new table */ - sql = sqlite3_mprintf("INSERT INTO '%q'(folder_uuid, path, name, modified_time, name_pinyin, storage_type) SELECT folder_uuid, path, name, modified_time, name_pinyin, storage_type FROM '%q';", MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - if (ret != MS_MEDIA_ERR_NONE) - media_svc_error("Error when backup folder table"); - SQLITE3_SAFE_FREE(sql); - - /* Drop tmp table*/ - sql = sqlite3_mprintf("DROP TABLE '%q';", MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - if (ret != MS_MEDIA_ERR_NONE) - media_svc_error("Error when drop backup folder table"); - SQLITE3_SAFE_FREE(sql); - - } else { - ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_upgrade_table_query failed"); - goto ERROR; - } - } - - ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_LIST_PLAYLIST_MAP, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_upgrade_table_query failed"); - goto ERROR; - } - - ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_PLAYLIST, MEDIA_SVC_DB_LIST_PLAYLIST, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_upgrade_table_query failed"); - goto ERROR; - } - - ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_LIST_ALBUM, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_upgrade_table_query failed"); - goto ERROR; - } - - ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_LIST_TAG_MAP, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_upgrade_table_query failed"); - goto ERROR; - } - - ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_TAG, MEDIA_SVC_DB_LIST_TAG, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_upgrade_table_query failed"); - goto ERROR; - } - - ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_LIST_BOOKMARK, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_upgrade_table_query failed"); - goto ERROR; - } - - ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_LIST_STORAGE, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_upgrade_table_query failed"); - goto ERROR; - } - - if (cur_version < USER_V4) { - /* Need to default value in storage_uuid */ - sql = sqlite3_mprintf("UPDATE %q SET storage_uuid = '%q';", MEDIA_SVC_DB_TABLE_MEDIA, "media"); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - - sql = sqlite3_mprintf("UPDATE %q SET storage_uuid = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, "media"); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - } - - /* Upgrade issue tizen 3.0 to 4.0 */ - if (cur_version < USER_V6) { - /******Upgrade Storage Table******/ - /* remove "storage_account" column */ - sql = sqlite3_mprintf("ALTER TABLE %q RENAME TO %q;", MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_LIST_STORAGE, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } - - sql = sqlite3_mprintf("INSERT INTO %q (storage_uuid, storage_name, storage_path, storage_type, scan_status, validity) SELECT storage_uuid, storage_name, storage_path, storage_type, scan_status, validity FROM %q;", MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - sql = sqlite3_mprintf("DROP TABLE %q;", MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - /******Upgrade Folder Table******/ - /* remove "parent_folder_uuid" column */ - sql = sqlite3_mprintf("ALTER TABLE %q RENAME TO %q;", MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } - - sql = sqlite3_mprintf("INSERT INTO %q (folder_uuid, path, name, modified_time, name_pinyin, storage_type, storage_uuid, folder_order, validity, scan_status) SELECT folder_uuid, path, name, modified_time, name_pinyin, storage_type, storage_uuid, folder_order, validity, scan_status FROM %q;", MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - sql = sqlite3_mprintf("DROP TABLE %q;", MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - /******Upgrade Face Table******/ - sql = sqlite3_mprintf("DROP TABLE %q; DROP TABLE %q; ", MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_FACE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_LIST_FACE_SCAN_LIST, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } - - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FACE, MEDIA_SVC_DB_LIST_FACE, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } - - } - - /* Upgrade issue tizen 4.0 to 5.0 */ - if (cur_version < USER_V7) { - /******Upgrade Folder Table******/ - /* remove "scan_status" column */ - sql = sqlite3_mprintf("ALTER TABLE %q RENAME TO %q;", MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } - - sql = sqlite3_mprintf("INSERT INTO %q (folder_uuid, path, name, modified_time, name_pinyin, storage_type, storage_uuid, folder_order, validity) SELECT folder_uuid, path, name, modified_time, name_pinyin, storage_type, storage_uuid, folder_order, validity FROM %q;", MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - sql = sqlite3_mprintf("DROP TABLE %q;", MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - - /******Upgrade Storage Table******/ - /* remove "scan_status", "storage_name" column */ - sql = sqlite3_mprintf("ALTER TABLE %q RENAME TO %q;", MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_LIST_STORAGE, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } - - sql = sqlite3_mprintf("INSERT INTO %q (storage_uuid, 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); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; - } - - sql = sqlite3_mprintf("DROP TABLE %q;", MEDIA_SVC_DB_TABLE_TMP_TABLE); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_sql_query failed"); - goto ERROR; + char *zErrMsg = NULL; + int retry_count = 0; + +EXEC_RETRY: + ret = sqlite3_exec(handle, query, NULL, NULL, &zErrMsg); + if (SQLITE_OK != ret) { + media_svc_sec_error("Error[%s],Query[%s]", zErrMsg, query); + SQLITE3_SAFE_FREE(zErrMsg); + if (ret == SQLITE_BUSY) { + ret = MS_MEDIA_ERR_DB_BUSY_FAIL; + } else if (ret == SQLITE_CONSTRAINT) { + ret = MS_MEDIA_ERR_DB_CONSTRAINT_FAIL; + } else if (ret == SQLITE_FULL) { + ret = MS_MEDIA_ERR_DB_FULL_FAIL; + } else if (ret == SQLITE_LOCKED) { + if (retry_count < MAX_RETRY) { + media_svc_error("Locked retry[%d]", retry_count); + retry_count++; + usleep(SLEEP_TIME); + goto EXEC_RETRY; + } + ret = MS_MEDIA_ERR_DB_INTERNAL; + } else { + ret = MS_MEDIA_ERR_DB_INTERNAL; } } - /* Rebuilding view */ - ret = __media_svc_rebuild_view_query(db_handle, uid); - - /* Update user version */ - sql = sqlite3_mprintf("PRAGMA user_version=%d;", LATEST_VERSION_NUMBER); - if (sql == NULL) { - media_svc_error("Query creation failed"); - ret = MS_MEDIA_ERR_OUT_OF_MEMORY; - goto ERROR; - } - - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - - _media_svc_destroy_table_query(); - - media_svc_debug_fleave(); - - return ret; - -ERROR: - _media_svc_destroy_table_query(); - return ret; } -int _media_svc_sql_query(const char *sql_str, uid_t uid) +int _media_svc_sql_query_direct(const char *sql_str, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; + sqlite3 *handle = NULL; - media_svc_sec_debug("[SQL query] : %s", sql_str); - - ret = media_db_request_update_db(sql_str, uid); + ret = media_db_connect(&handle, uid, true); + media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed"); + ret = __media_svc_query_direct(handle, sql_str, uid); + media_db_disconnect(handle); return ret; } -int _media_svc_get_user_version(sqlite3 *db_handle, int *user_version) +int _media_svc_check_table_exist(sqlite3 *db_handle, bool *exist) { int ret = MS_MEDIA_ERR_NONE; sqlite3_stmt *sql_stmt = NULL; - char *sql = sqlite3_mprintf("PRAGMA user_version;"); + char *sql = sqlite3_mprintf("SELECT name FROM sqlite_master WHERE type='table' AND name=%Q;", DB_TABLE_MEDIA); + + ret = _media_svc_sql_prepare_to_step_simple(db_handle, sql, &sql_stmt); + media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_sql_prepare_to_step_simple failed"); - ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("error when get user_version."); - return ret; + if (sqlite3_step(sql_stmt) != SQLITE_ROW) { + media_svc_debug("Need to create table"); + *exist = false; + } else { + media_svc_debug("Already exists"); + *exist = true; } - *user_version = sqlite3_column_int(sql_stmt, 0); SQLITE3_FINALIZE(sql_stmt); return MS_MEDIA_ERR_NONE; @@ -1344,7 +583,7 @@ int _media_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, sqlite3 return MS_MEDIA_ERR_INVALID_PARAMETER; } - media_svc_sec_debug("[SQL query] : %s", sql_str); + media_svc_sec_debug("Query[%s]", sql_str); err = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL); sqlite3_free((char *)sql_str); @@ -1353,15 +592,13 @@ int _media_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, sqlite3 media_svc_error("prepare error %d[%s]", err, sqlite3_errmsg(handle)); if (err == SQLITE_CORRUPT) return MS_MEDIA_ERR_DB_CORRUPT; - else if (err == SQLITE_PERM) - return MS_MEDIA_ERR_DB_PERMISSION; return MS_MEDIA_ERR_DB_INTERNAL; } err = sqlite3_step(*stmt); if (err != SQLITE_ROW) { - media_svc_error("[No-Error] Item not found. end of row [%s]", sqlite3_errmsg(handle)); + media_svc_debug("No record"); SQLITE3_FINALIZE(*stmt); return MS_MEDIA_ERR_DB_NO_RECORD; } @@ -1375,7 +612,7 @@ int _media_svc_sql_prepare_to_step_simple(sqlite3 *handle, const char *sql_str, media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "handle is NULL"); - media_svc_sec_debug("[SQL query] : %s", sql_str); + media_svc_sec_debug("Query[%s]", sql_str); if (!STRING_VALID(sql_str)) { media_svc_error("invalid query"); @@ -1389,8 +626,6 @@ int _media_svc_sql_prepare_to_step_simple(sqlite3 *handle, const char *sql_str, media_svc_error("prepare error %d[%s]", err, sqlite3_errmsg(handle)); if (err == SQLITE_CORRUPT) return MS_MEDIA_ERR_DB_CORRUPT; - else if (err == SQLITE_PERM) - return MS_MEDIA_ERR_DB_PERMISSION; return MS_MEDIA_ERR_DB_INTERNAL; } @@ -1398,28 +633,6 @@ int _media_svc_sql_prepare_to_step_simple(sqlite3 *handle, const char *sql_str, return MS_MEDIA_ERR_NONE; } -int _media_svc_sql_begin_trans(uid_t uid) -{ - int ret = MS_MEDIA_ERR_NONE; - - media_svc_debug("Batch start(Transaction block version)"); - - ret = media_db_request_update_db_batch_start("BEGIN IMMEDIATE;", uid); - - return ret; -} - -int _media_svc_sql_end_trans(uid_t uid) -{ - int ret = MS_MEDIA_ERR_NONE; - - media_svc_debug("Batch end(Transaction block version)"); - - ret = media_db_request_update_db_batch_end("COMMIT;", uid); - - return ret; -} - int _media_svc_sql_query_list(GList **query_list, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; @@ -1427,8 +640,8 @@ int _media_svc_sql_query_list(GList **query_list, uid_t uid) int length = g_list_length(*query_list); char *sql = NULL; char query_bundle[MEDIA_SVC_QUERY_LEN_MAX] = {0, }; - int query_len = 0; - int total_len = 0; + unsigned int query_len = 0; + unsigned int total_len = 0; media_svc_debug("query list length : [%d]", length); @@ -1440,15 +653,15 @@ int _media_svc_sql_query_list(GList **query_list, uid_t uid) query_len = strlen(sql); if (query_len >= (sizeof(query_bundle) - 1)) { - media_svc_error("NEED TO CHECK FILE : A single query size exceeds 8k [%d]", query_len); + media_svc_error("NEED TO CHECK FILE : A single query size exceeds 8k [%u]", query_len); SQLITE3_SAFE_FREE(sql); continue; } if ((total_len + query_len) >= (sizeof(query_bundle) - 1)) { - ret = media_db_request_update_db_batch(query_bundle, uid); + ret = media_db_request_update_db(query_bundle, uid); if (ret != MS_MEDIA_ERR_NONE) - media_svc_error("media_db_request_update_db_batch failed : %d", ret); + media_svc_error("media_db_request_update_db failed : %d", ret); memset(query_bundle, 0, sizeof(query_bundle)); total_len = 0; @@ -1468,9 +681,9 @@ int _media_svc_sql_query_list(GList **query_list, uid_t uid) } if (total_len > 0) { - ret = media_db_request_update_db_batch(query_bundle, uid); + ret = media_db_request_update_db(query_bundle, uid); if (ret != MS_MEDIA_ERR_NONE) - media_svc_error("media_db_request_update_db_batch failed : %d", ret); + media_svc_error("media_db_request_update_db failed : %d", ret); memset(query_bundle, 0, sizeof(query_bundle)); total_len = 0; @@ -1479,151 +692,71 @@ int _media_svc_sql_query_list(GList **query_list, uid_t uid) _media_svc_sql_query_release(query_list); return MS_MEDIA_ERR_NONE; - } -void _media_svc_sql_query_add(GList **query_list, char **query) -{ - *query_list = g_list_append(*query_list, *query); -} - -void _media_svc_sql_query_release(GList **query_list) -{ - if (*query_list) { - media_svc_debug("_svc_sql_query_release"); - g_list_free(*query_list); - *query_list = NULL; - } -} - -int _media_svc_check_db_upgrade(sqlite3 *db_handle, int user_version, uid_t uid) -{ - if (user_version < LATEST_VERSION_NUMBER) { - media_svc_error("Current DB is out of date(%d).. So start to upgrade DB(%d)", user_version, LATEST_VERSION_NUMBER); - return __media_svc_db_upgrade(db_handle, user_version, uid); - } else { - return MS_MEDIA_ERR_NONE; - } -} - -int _media_svc_create_media_table_with_id(const char *table_id, uid_t uid) +int _media_svc_sql_query_list_direct(GList **query_list, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; + int idx = 0; + int length = g_list_length(*query_list); + char *sql = NULL; + char *zErrMsg = NULL; + sqlite3 *handle = NULL; + bool with_transaction = true; - ret = _media_svc_init_table_query(table_id); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_init_table_query failed"); - goto ERROR; - } - - ret = _media_svc_make_table_query(table_id, MEDIA_SVC_DB_LIST_MEDIA, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } + media_svc_debug("query list length[%d]", length); + if (length == 0) + goto ZERO_LEN; - /* Add for trigger */ - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } + ret = media_db_connect(&handle, uid, true); + media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed"); - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_LIST_PLAYLIST_MAP, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; + ret = sqlite3_exec(handle, "BEGIN;", NULL, NULL, &zErrMsg); + if (SQLITE_OK != ret) { + media_svc_sec_error("Transaction failed[%s]. Try an individual insert.", zErrMsg); + SQLITE3_SAFE_FREE(zErrMsg); + with_transaction = false; } - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_LIST_ALBUM, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; - } + for (idx = 0; idx < length; idx++) { + sql = (char *)g_list_nth_data(*query_list, idx); + if (STRING_VALID(sql)) { + ret = __media_svc_query_direct(handle, sql, uid); + if (ret != MS_MEDIA_ERR_NONE) + media_svc_debug("_media_svc_query_direct failed[%s]", sql); - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_LIST_TAG_MAP, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; + SQLITE3_SAFE_FREE(sql); + } } - ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_LIST_BOOKMARK, uid); - if (ret != MS_MEDIA_ERR_NONE) { - media_svc_error("_media_svc_make_table_query failed"); - goto ERROR; + if (with_transaction) { + ret = sqlite3_exec(handle, "COMMIT;", NULL, NULL, &zErrMsg); + if (SQLITE_OK != ret) { + media_svc_sec_error("Commit failed[%s]", zErrMsg); + SQLITE3_SAFE_FREE(zErrMsg); + media_db_disconnect(handle); + _media_svc_sql_query_release(query_list); + return MS_MEDIA_ERR_DB_INTERNAL; + } } - _media_svc_destroy_table_query(); - - return ret; -ERROR: + media_db_disconnect(handle); - _media_svc_destroy_table_query(); +ZERO_LEN: + _media_svc_sql_query_release(query_list); - return ret; + return MS_MEDIA_ERR_NONE; } -int _media_svc_update_media_view(sqlite3 *db_handle, uid_t uid) +void _media_svc_sql_query_add(GList **query_list, char **query) { - int ret = MS_MEDIA_ERR_NONE; - char *sql = NULL; - sqlite3_stmt *sql_stmt = NULL; - int item_cnt = 0; - int idx = 0; - GList *storage_list = NULL; - char view_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, }; - memset(view_query, 0x00, sizeof(view_query)); - - 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); - - /*Select list of storage*/ - sql = sqlite3_mprintf("SELECT storage_uuid FROM '%s' WHERE validity=1 AND storage_uuid != '%s'", MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_TABLE_MEDIA); - ret = _media_svc_sql_prepare_to_step_simple(db_handle, sql, &sql_stmt); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - - while (sqlite3_step(sql_stmt) == SQLITE_ROW) { - if (STRING_VALID((const char *)sqlite3_column_text(sql_stmt, 0))) - storage_list = g_list_append(storage_list, strdup((char *)sqlite3_column_text(sql_stmt, 0))); - } - SQLITE3_FINALIZE(sql_stmt); - - if ((storage_list != NULL) && (g_list_length(storage_list) > 0)) { - item_cnt = g_list_length(storage_list); - - for (idx = 0; idx < item_cnt; idx++) { - int table_cnt = 0; - char *storage_id = NULL; - storage_id = g_list_nth_data(storage_list, idx); - - if (STRING_VALID(storage_id)) { - /*Select list of storage*/ - sql = sqlite3_mprintf("SELECT COUNT(*) FROM SQLITE_MASTER WHERE type='table' and name='%q'", storage_id); - ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt); - if (ret != MS_MEDIA_ERR_NONE) { - SAFE_FREE(storage_id); - continue; - } - - table_cnt = sqlite3_column_int(sql_stmt, 0); - SQLITE3_FINALIZE(sql_stmt); - - if (table_cnt > 0) { - char append_query[128] = {0, }; - memset(append_query, 0x00, sizeof(append_query)); - snprintf(append_query, sizeof(append_query), " UNION SELECT * from '%s'", storage_id); - SAFE_STRLCAT(view_query, append_query, sizeof(view_query)); - } else { - media_svc_error("media table not exist for storage [%s]", storage_id); - } + *query_list = g_list_append(*query_list, *query); +} - SAFE_FREE(storage_id); - } - } - g_list_free(storage_list); +void _media_svc_sql_query_release(GList **query_list) +{ + if (*query_list) { + g_list_free(*query_list); + *query_list = NULL; } - - ret = _media_svc_sql_query(view_query, uid); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - - return ret; }