Improve count query 84/227884/5
authorMinje Ahn <minje.ahn@samsung.com>
Tue, 17 Mar 2020 05:09:22 +0000 (14:09 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Tue, 17 Mar 2020 23:37:03 +0000 (08:37 +0900)
Change-Id: Ied0cd23ceaf98fa3be6a712952698572068a41a0
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
include/media_info_private.h
include_product/media_info_private.h
src/media_content.c
src/media_db.c

index 66b5414..2fcd384 100755 (executable)
@@ -411,7 +411,7 @@ typedef struct _media_content_cb_data {
 #define SELECT_PLAYLIST_COUNT          "SELECT COUNT(DISTINCT playlist_id) FROM "DB_VIEW_PLAYLIST" WHERE 1 "
 #define SELECT_BOOKMARK_COUNT  "SELECT COUNT(*) FROM "BOOKMARK_MEDIA_JOIN
 #define SELECT_BOOKMARK_COUNT_BY_STORAGE_ID    SELECT_BOOKMARK_COUNT"AND storage_uuid='%s' "
-#define SELECT_MEDIA_GROUP_COUNT       "SELECT COUNT(*) FROM ("SELECT_MEDIA_GROUP_LIST
+#define SELECT_MEDIA_GROUP_COUNT       "SELECT COUNT(DISTINCT %s) + COUNT(DISTINCT CASE WHEN %s IS NULL THEN 1 END) AS COUNT FROM "DB_TABLE_MEDIA" WHERE validity IN (1, 2) "
 #define SELECT_MEDIA_GROUP_COUNT_BY_STORAGE_ID SELECT_MEDIA_GROUP_COUNT"AND storage_uuid='%s' "
 /*count(distinct x) count only non-null values, but select distinct X returns include null. so sync the result of count and list, don't use count(distinct x)*/
 
@@ -521,7 +521,7 @@ typedef struct _media_content_cb_data {
 #define UPDATE_MEDIA_INFO_IN_FACE_SCAN_LIST    "UPDATE "DB_TABLE_FACE_SCAN_LIST" SET modified_time = 0 WHERE media_id IN (SELECT media_id FROM "DB_TABLE_FACE" WHERE media_face_id=%d)"
 #define SELECT_FACE_ID                 "SELECT media_face_id FROM "DB_TABLE_FACE" WHERE media_id='%q' AND face_rect_x=%d AND face_rect_y=%d AND face_rect_w=%d AND face_rect_h=%d AND face_orientation=%d"
 
-int _content_query_prepare(char *select_query, char *condition_query, char *option_query, sqlite3_stmt **stmt);
+int _content_query_prepare(const char *select_query, const char *condition_query, const char *option_query, sqlite3_stmt **stmt);
 int _content_get_result(char *query, sqlite3_stmt **stmt);
 int _content_error_capi(int internal_error);
 int _content_query_sql(char *query_str);
index 5c08874..f61d93e 100755 (executable)
@@ -735,7 +735,7 @@ typedef struct _media_content_scan_cb_data_v2 {
 #define SELECT_UHD_FROM_UHD                            "SELECT * FROM "DB_TABLE_UHD" WHERE media_id='%q'"
 #define UPDATE_UHD_META_FROM_UHD               "UPDATE "DB_TABLE_UHD" SET content_title=%Q, release_date=%Q, played_position=%d, sub_type=%d, played_count=%d WHERE media_id='%q'"
 
-int _content_query_prepare(char *select_query, char *condition_query, char *option_query, sqlite3_stmt **stmt);
+int _content_query_prepare(const char *select_query, const char *condition_query, const char *option_query, sqlite3_stmt **stmt);
 int _content_get_result(char *query, sqlite3_stmt **stmt);
 int _content_error_capi(int internal_error);
 int _content_query_sql(char *query_str);
index e1ee353..cf55609 100644 (file)
@@ -36,7 +36,7 @@ uid_t _content_get_uid(void)
                return content_g_uid;
 }
 
-int _content_query_prepare(char *select_query, char *condition_query, char *option_query, sqlite3_stmt **stmt)
+int _content_query_prepare(const char *select_query, const char *condition_query, const char *option_query, sqlite3_stmt **stmt)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        char *query = NULL;
index f4e32ce..ca96b98 100755 (executable)
@@ -185,7 +185,7 @@ static int __media_db_make_query(filter_h filter, char **condition_query, char *
        filter_s *_filter = NULL;
 
        if (filter != NULL) {
-               _filter = (filter_s*)filter;
+               _filter = (filter_s *)filter;
 
                if (STRING_VALID(_filter->condition)) {
                        ret = _media_filter_attribute_generate(filter, condition_query);
@@ -220,7 +220,7 @@ int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *gro
        char select_query[MAX_QUERY_SIZE] = {0, };
        char *condition_query = NULL;
        char *option_query = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 
@@ -284,7 +284,7 @@ int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *gro
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        if (sqlite3_step(stmt) == SQLITE_ROW)
-               *group_count = (int)sqlite3_column_int(stmt, 0);
+               *group_count = sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
 
@@ -298,7 +298,7 @@ int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *g
        char select_query[MAX_QUERY_SIZE] = {0, };
        char *condition_query = NULL;
        char *option_query = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
        if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
@@ -338,7 +338,7 @@ int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *g
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        if (sqlite3_step(stmt) == SQLITE_ROW)
-               *group_count = (int)sqlite3_column_int(stmt, 0);
+               *group_count = sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
 
@@ -353,7 +353,7 @@ int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_
        char *option_query = NULL;
        char *name = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
        memset(select_query, 0x00, sizeof(select_query));
        if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
@@ -404,7 +404,7 @@ int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, me
        char *option_query = NULL;
        char *name = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
        memset(group_query, 0x00, sizeof(group_query));
@@ -466,58 +466,47 @@ int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *gro
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        sqlite3_stmt *stmt = NULL;
-       char select_query[MAX_QUERY_SIZE] = {0, };
+       char *select_query = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
-       filter_s *_filter = (filter_s*)filter;
-
-       memset(select_query, 0x00, sizeof(select_query));
+       filter_s *_filter = (filter_s *)filter;
 
        switch (group_type) {
        case MEDIA_GROUP_ALBUM:
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT_BY_STORAGE_ID, _filter->storage_id);
+                       select_query = g_strdup_printf(SELECT_ALBUM_COUNT_BY_STORAGE_ID, _filter->storage_id);
                else
-                       snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT);
+                       select_query = g_strdup(SELECT_ALBUM_COUNT);
 
                break;
        case MEDIA_GROUP_FOLDER:
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id);
+                       select_query = g_strdup_printf(SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id);
                else
-                       snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT);
+                       select_query = g_strdup(SELECT_FOLDER_COUNT);
 
                break;
        case MEDIA_GROUP_PLAYLIST:
-               if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) {
-                       media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-                       return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-               }
+               select_query = g_strdup(SELECT_PLAYLIST_COUNT);
                break;
        case MEDIA_GROUP_TAG:
-               if (!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) {
-                       media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-                       return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-               }
+               select_query = g_strdup(SELECT_TAG_COUNT);
                break;
        case MEDIA_GROUP_BOOKMARK:
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT_BY_STORAGE_ID, _filter->storage_id);
+                       select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT_BY_STORAGE_ID, _filter->storage_id);
                else
-                       snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT);
+                       select_query = g_strdup(SELECT_BOOKMARK_COUNT);
 
                break;
        case MEDIA_GROUP_STORAGE:
-               if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) {
-                       media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-                       return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-               }
+               select_query = g_strdup(SELECT_STORAGE_COUNT);
                break;
        case MEDIA_GROUP_FACE:
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT_BY_STORAGE_ID, _filter->storage_id);
+                       select_query = g_strdup_printf(SELECT_FACE_COUNT_BY_STORAGE_ID, _filter->storage_id);
                else
-                       snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT);
+                       select_query = g_strdup(SELECT_FACE_COUNT);
                break;
        default:
                media_content_error("Invalid group type [%d]", group_type);
@@ -525,15 +514,19 @@ int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *gro
        }
 
        ret = __media_db_make_query(filter, &condition_query, &option_query);
-       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
 
        ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
-       SAFE_FREE(condition_query);
-       SAFE_FREE(option_query);
+       g_free(select_query);
+       g_free(condition_query);
+       g_free(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        if (sqlite3_step(stmt) == SQLITE_ROW)
-               *group_count = (int)sqlite3_column_int(stmt, 0);
+               *group_count = sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
 
@@ -544,37 +537,30 @@ int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *g
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        sqlite3_stmt *stmt = NULL;
-       char select_query[MAX_QUERY_SIZE] = {0, };
+       char *select_query = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       memset(select_query, 0x00, sizeof(select_query));
        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
+               select_query = g_strdup_printf(SELECT_MEDIA_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), __media_db_get_group_name(group), _filter->storage_id);
        else
-               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group));
+               select_query = g_strdup_printf(SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), __media_db_get_group_name(group));
 
        ret = __media_db_make_query(filter, &condition_query, &option_query);
-       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
-
-       SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
-       if (STRING_VALID(condition_query)) {
-               SAFE_STRLCAT(select_query, QUERY_KEYWORD_AND, sizeof(select_query));
-               SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
        }
-       if (STRING_VALID(option_query))
-               SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
-       SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
-
-       SAFE_FREE(condition_query);
-       SAFE_FREE(option_query);
 
        ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
+       g_free(select_query);
+       g_free(condition_query);
+       g_free(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        if (sqlite3_step(stmt) == SQLITE_ROW)
-               *group_count = (int)sqlite3_column_int(stmt, 0);
+               *group_count = sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
 
@@ -584,25 +570,28 @@ int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *g
 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
-       char select_query[MAX_QUERY_SIZE] = {0, };
+       char *select_query = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
        char *name = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
-       memset(select_query, 0x00, sizeof(select_query));
+       filter_s *_filter = (filter_s *)filter;
 
        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
+               select_query = g_strdup_printf(SELECT_MEDIA_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
        else
-               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group));
+               select_query = g_strdup_printf(SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group));
 
        ret = __media_db_make_query(filter, &condition_query, &option_query);
-       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
 
        ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
-       SAFE_FREE(condition_query);
-       SAFE_FREE(option_query);
+       g_free(select_query);
+       g_free(condition_query);
+       g_free(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        while (sqlite3_step(stmt) == SQLITE_ROW) {
@@ -629,7 +618,7 @@ int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_dat
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 #ifdef _USE_TVPD_MODE
@@ -660,7 +649,7 @@ int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_dat
                        return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
                }
 
-               album->album_id = (int)sqlite3_column_int(stmt, 0);
+               album->album_id = sqlite3_column_int(stmt, 0);
                album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
                album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
                album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
@@ -685,7 +674,7 @@ int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_d
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 #ifdef _USE_TVPD_MODE
@@ -719,7 +708,7 @@ int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_d
                _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
                _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
                _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
-               _folder->storage_type = (int)sqlite3_column_int(stmt, 3);
+               _folder->storage_type = sqlite3_column_int(stmt, 3);
                _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 4));
 
                if (callback((media_folder_h)_folder, user_data) == false) {
@@ -738,22 +727,14 @@ int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_d
 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
-       char select_query[MAX_QUERY_SIZE] = {0, };
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
 
-       memset(select_query, 0x00, sizeof(select_query));
-
-       if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_LIST, sizeof(select_query))) {
-               media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-       }
-
        ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
+       ret = _content_query_prepare(SELECT_PLAYLIST_LIST, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -767,7 +748,7 @@ int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *us
                        return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
                }
 
-               _playlist->playlist_id = (int)sqlite3_column_int(stmt, 0);
+               _playlist->playlist_id = sqlite3_column_int(stmt, 0);
                _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
                _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
 
@@ -786,26 +767,28 @@ int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *us
 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
-       char select_query[MAX_QUERY_SIZE] = {0, };
+       char *select_query = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
 
-       memset(select_query, 0x00, sizeof(select_query));
-
-       snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
+       select_query = g_strdup_printf(SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
 
        ret = __media_db_make_query(filter, &condition_query, &option_query);
-       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
 
        ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
-       SAFE_FREE(condition_query);
-       SAFE_FREE(option_query);
+       g_free(select_query);
+       g_free(condition_query);
+       g_free(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        while (sqlite3_step(stmt) == SQLITE_ROW) {
                int playlist_member_id = 0;
-               playlist_member_id = (int)sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX);        /*MEDIA_INFO_ITEM_MAX is pm_id*/
+               playlist_member_id = sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX);     /*MEDIA_INFO_ITEM_MAX is pm_id*/
 
                media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
 
@@ -833,27 +816,26 @@ int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_membe
 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
-       char select_query[MAX_QUERY_SIZE] = {0, };
+       char *select_query = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
 
-       memset(select_query, 0x00, sizeof(select_query));
-
-       if (!STRING_VALID(media_id)) {
-               if (!SAFE_STRLCPY(select_query, SELECT_TAG_LIST, sizeof(select_query))) {
-                       media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-                       return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-               }
-       } else
-               snprintf(select_query, sizeof(select_query), SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
+       if (STRING_VALID(media_id))
+               select_query = g_strdup_printf(SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
+       else
+               select_query = g_strdup(SELECT_TAG_LIST);
 
        ret = __media_db_make_query(filter, &condition_query, &option_query);
-       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
 
        ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
-       SAFE_FREE(condition_query);
-       SAFE_FREE(option_query);
+       g_free(select_query);
+       g_free(condition_query);
+       g_free(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        while (sqlite3_step(stmt) == SQLITE_ROW) {
@@ -865,7 +847,7 @@ int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callba
                        return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
                }
 
-               _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
+               _tag->tag_id = sqlite3_column_int(stmt, 0);
                _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
 
                if (callback((media_tag_h)_tag, user_data) == false) {
@@ -887,7 +869,7 @@ int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 #ifdef _USE_TVPD_MODE
@@ -930,9 +912,9 @@ int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark
                        return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
                }
 
-               bookmark->bookmark_id = (int)sqlite3_column_int(stmt, 0);
+               bookmark->bookmark_id = sqlite3_column_int(stmt, 0);
                bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
-               bookmark->marked_time = (int)sqlite3_column_int(stmt, 2);
+               bookmark->marked_time = sqlite3_column_int(stmt, 2);
                bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
                bookmark->name = g_strdup((const char *)sqlite3_column_text(stmt, 4));
 
@@ -957,7 +939,7 @@ int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb call
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 #ifdef _USE_TVPD_MODE
@@ -999,13 +981,13 @@ int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb call
                        return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
                }
 
-               face->face_id = (int)sqlite3_column_int(stmt, 0);
+               face->face_id = sqlite3_column_int(stmt, 0);
                face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
-               face->face_rect_x = (int)sqlite3_column_int(stmt, 2);
-               face->face_rect_y = (int)sqlite3_column_int(stmt, 3);
-               face->face_rect_w = (int)sqlite3_column_int(stmt, 4);
-               face->face_rect_h = (int)sqlite3_column_int(stmt, 5);
-               face->orientation = (int)sqlite3_column_int(stmt, 6);
+               face->face_rect_x = sqlite3_column_int(stmt, 2);
+               face->face_rect_y = sqlite3_column_int(stmt, 3);
+               face->face_rect_w = sqlite3_column_int(stmt, 4);
+               face->face_rect_h = sqlite3_column_int(stmt, 5);
+               face->orientation = sqlite3_column_int(stmt, 6);
                face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
 
                if (callback((media_face_h)face, user_data) == false) {
@@ -1029,7 +1011,7 @@ int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_li
        char select_query[MAX_QUERY_SIZE] = {0, };
        char *condition_query = NULL;
        char *option_query = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 
@@ -1063,7 +1045,7 @@ int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_li
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        if (sqlite3_step(stmt) == SQLITE_ROW)
-               *item_count = (int)sqlite3_column_int(stmt, 0);
+               *item_count = sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
 
@@ -1079,7 +1061,7 @@ int _media_db_get_group_item_count(const char *group_name, filter_h filter, grou
        char *condition_query = NULL;
        char *option_query = NULL;
        bool is_simple = FALSE;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 
@@ -1197,7 +1179,7 @@ int _media_db_get_group_item_count(const char *group_name, filter_h filter, grou
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        if (sqlite3_step(stmt) == SQLITE_ROW)
-               *item_count = (int)sqlite3_column_int(stmt, 0);
+               *item_count = sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
 
@@ -1211,7 +1193,7 @@ int _media_db_get_group_item_by_id(int group_id, filter_h filter, media_info_cb
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 
@@ -1294,7 +1276,7 @@ int _media_db_get_group_item(const char *group_name, filter_h filter, media_info
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 #ifdef _USE_TVPD_MODE
@@ -1371,8 +1353,8 @@ int _media_db_get_group_item_by_union_select(const char *group_name, filter_h fi
        char *condition_query2 = NULL;
        char *option_query2 = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter1 = (filter_s*)filter1;
-       filter_s *_filter2 = (filter_s*)filter2;
+       filter_s *_filter1 = (filter_s *)filter1;
+       filter_s *_filter2 = (filter_s *)filter2;
 
        memset(select_query1, 0x00, sizeof(select_query1));
 
@@ -1445,7 +1427,7 @@ int _media_db_get_media_group_item_count(const char *group_name, filter_h filter
        char *tmp_query = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 #ifdef _USE_TVPD_MODE
@@ -1535,7 +1517,7 @@ int _media_db_get_media_group_item_count(const char *group_name, filter_h filter
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        if (sqlite3_step(stmt) == SQLITE_ROW)
-               *item_count = (int)sqlite3_column_int(stmt, 0);
+               *item_count = sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
 
@@ -1550,7 +1532,7 @@ int _media_db_get_media_group_item(const char *group_name, filter_h filter, medi
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 #ifdef _USE_TVPD_MODE
@@ -1653,7 +1635,7 @@ int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user
 
                _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
                _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
-               _storage->storage_type = (int)sqlite3_column_int(stmt, 2);
+               _storage->storage_type = sqlite3_column_int(stmt, 2);
 
                if (callback((media_storage_h)_storage, user_data) == false) {
                        media_storage_destroy((media_storage_h) _storage);
@@ -1701,7 +1683,7 @@ int _media_db_get_pvr_group_item(const char *group_name, filter_h filter, media_
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 
@@ -1822,17 +1804,17 @@ void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
 
        _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
 
-       _pvr->duration = (int)sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
+       _pvr->duration = sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
 
-       _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
+       _pvr->timezone = sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
 
-       _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC);
+       _pvr->ptc = sqlite3_column_int(stmt, MEDIA_PVR_PTC);
 
-       _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
+       _pvr->major = sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
 
-       _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
+       _pvr->minor = sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
 
-       _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
+       _pvr->channel_type = sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
 
        _pvr->service_profile = (unsigned int)sqlite3_column_int(stmt, MEDIA_PVR_SERVICE_PROFILE);
 
@@ -1845,7 +1827,7 @@ void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
        if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE)))
                _pvr->program_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
 
-       _pvr->program_num = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
+       _pvr->program_num = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
 
        if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID)))
                _pvr->program_crid = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
@@ -1868,57 +1850,57 @@ void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
        if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA)))
                _pvr->private_data = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
 
-       _pvr->embargo_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
+       _pvr->embargo_time = sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
 
-       _pvr->expiry_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
+       _pvr->expiry_time = sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
 
-       _pvr->start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
+       _pvr->start_time = sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
 
-       _pvr->program_start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
+       _pvr->program_start_time = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
 
-       _pvr->program_end_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
+       _pvr->program_end_time = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
 
-       _pvr->program_date = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
+       _pvr->program_date = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
 
-       _pvr->parental_rating = (int)sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
+       _pvr->parental_rating = sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
 
-       _pvr->timer_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
+       _pvr->timer_record = sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
 
-       _pvr->series_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
+       _pvr->series_record = sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
 
-       _pvr->hd = (int)sqlite3_column_int(stmt, MEDIA_PVR_HD);
+       _pvr->hd = sqlite3_column_int(stmt, MEDIA_PVR_HD);
 
-       _pvr->subtitle = (int)sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
+       _pvr->subtitle = sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
 
-       _pvr->ttx = (int)sqlite3_column_int(stmt, MEDIA_PVR_TTX);
+       _pvr->ttx = sqlite3_column_int(stmt, MEDIA_PVR_TTX);
 
-       _pvr->ad = (int)sqlite3_column_int(stmt, MEDIA_PVR_AD);
+       _pvr->ad = sqlite3_column_int(stmt, MEDIA_PVR_AD);
 
-       _pvr->hard_of_hearing_radio = (int)sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
+       _pvr->hard_of_hearing_radio = sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
 
-       _pvr->data_service = (int)sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
+       _pvr->data_service = sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
 
-       _pvr->content_lock = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
+       _pvr->content_lock = sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
 
-       _pvr->content_watch = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
+       _pvr->content_watch = sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
 
-       _pvr->has_audio_only = (int)sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
+       _pvr->has_audio_only = sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
 
-       _pvr->is_local_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
+       _pvr->is_local_record = sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
 
-       _pvr->resolution = (int)sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
+       _pvr->resolution = sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
 
-       _pvr->aspectratio = (int)sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
+       _pvr->aspectratio = sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
 
-       _pvr->sports_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
+       _pvr->sports_type = sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
 
-       _pvr->guidance_length = (int)sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
+       _pvr->guidance_length = sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
 
-       _pvr->tvmode = (int)sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
+       _pvr->tvmode = sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
 
-       _pvr->play_count = (int)sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
+       _pvr->play_count = sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
 
-       _pvr->highlight = (int)sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
+       _pvr->highlight = sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
 
        return;
 }
@@ -1930,7 +1912,7 @@ int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
 
@@ -2014,10 +1996,10 @@ void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
        if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE)))
                _uhd->release_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
 
-       _uhd->modified_time = (int)sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
-       _uhd->played_position = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
-       _uhd->sub_type = (int)sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
-       _uhd->played_count = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
+       _uhd->modified_time = sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
+       _uhd->played_position = sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
+       _uhd->sub_type = sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
+       _uhd->played_count = sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
 
        return;
 }
@@ -2029,7 +2011,7 @@ int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));