Improve readability of media_bookmark
[platform/core/api/media-content.git] / src / media_db.c
index 5d15b71..26f866e 100755 (executable)
 #include <media_info_private.h>
 #include <media_util_private.h>
 
-static char * __media_db_get_group_name(media_group_e group);
-static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query);
-
-static char * __media_db_get_group_name(media_group_e group)
+static const char * __media_db_get_group_name(media_group_e group)
 {
        switch (group) {
        case MEDIA_CONTENT_GROUP_DISPLAY_NAME:
-               return (char *)DB_FIELD_MEDIA_DISPLAY_NAME;
+               return DB_FIELD_MEDIA_DISPLAY_NAME;
        case MEDIA_CONTENT_GROUP_TYPE:
-               return (char *)DB_FIELD_MEDIA_TYPE;
+               return DB_FIELD_MEDIA_TYPE;
        case MEDIA_CONTENT_GROUP_MIME_TYPE:
-               return (char *) DB_FIELD_MEDIA_MIME_TYPE;
+               return DB_FIELD_MEDIA_MIME_TYPE;
        case MEDIA_CONTENT_GROUP_SIZE:
-               return (char *) DB_FIELD_MEDIA_SIZE;
+               return DB_FIELD_MEDIA_SIZE;
        case MEDIA_CONTENT_GROUP_ADDED_TIME:
-               return (char *) DB_FIELD_MEDIA_ADDED_TIME;
+               return DB_FIELD_MEDIA_ADDED_TIME;
        case MEDIA_CONTENT_GROUP_MODIFIED_TIME:
-               return (char *) DB_FIELD_MEDIA_MODIFIED_TIME;
+               return DB_FIELD_MEDIA_MODIFIED_TIME;
        case MEDIA_CONTENT_GROUP_TITLE:
-               return (char *) DB_FIELD_MEDIA_TITLE;
+               return DB_FIELD_MEDIA_TITLE;
        case MEDIA_CONTENT_GROUP_ARTIST:
-               return (char *) DB_FIELD_MEDIA_ARTIST;
+               return DB_FIELD_MEDIA_ARTIST;
        case MEDIA_CONTENT_GROUP_ALBUM_ARTIST:
-               return (char *) DB_FIELD_MEDIA_ALBUM_ARTIST;
+               return DB_FIELD_MEDIA_ALBUM_ARTIST;
        case MEDIA_CONTENT_GROUP_GENRE:
-               return (char *) DB_FIELD_MEDIA_GENRE;
+               return DB_FIELD_MEDIA_GENRE;
        case MEDIA_CONTENT_GROUP_COMPOSER:
-               return (char *) DB_FIELD_MEDIA_COMPOSER;
+               return DB_FIELD_MEDIA_COMPOSER;
        case MEDIA_CONTENT_GROUP_YEAR:
-               return (char *) DB_FIELD_MEDIA_YEAR;
+               return DB_FIELD_MEDIA_YEAR;
        case MEDIA_CONTENT_GROUP_RECORDED_DATE:
-               return (char *) DB_FIELD_MEDIA_RECORDED_DATE;
+               return DB_FIELD_MEDIA_RECORDED_DATE;
        case MEDIA_CONTENT_GROUP_COPYRIGHT:
-               return (char *) DB_FIELD_MEDIA_COPYRIGHT;
+               return DB_FIELD_MEDIA_COPYRIGHT;
        case MEDIA_CONTENT_GROUP_TRACK_NUM:
-               return (char *) DB_FIELD_MEDIA_TRACK_NUM;
+               return DB_FIELD_MEDIA_TRACK_NUM;
        case MEDIA_CONTENT_GROUP_DESCRIPTION:
-               return (char *) DB_FIELD_MEDIA_DESCRIPTION;
+               return DB_FIELD_MEDIA_DESCRIPTION;
        case MEDIA_CONTENT_GROUP_LONGITUDE:
-               return (char *) DB_FIELD_MEDIA_LONGITUDE;
+               return DB_FIELD_MEDIA_LONGITUDE;
        case MEDIA_CONTENT_GROUP_LATITUDE:
-               return (char *) DB_FIELD_MEDIA_LATITUDE;
+               return DB_FIELD_MEDIA_LATITUDE;
        case MEDIA_CONTENT_GROUP_ALTITUDE:
-               return (char *) DB_FIELD_MEDIA_ALTITUDE;
-       case MEDIA_CONTENT_GROUP_BURST_IMAGE:
-               return (char *) DB_FIELD_MEDIA_BURST_ID;
+               return DB_FIELD_MEDIA_ALTITUDE;
        case MEDIA_CONTENT_GROUP_RATING:
-               return (char *) DB_FIELD_MEDIA_RATING;
-       case MEDIA_CONTENT_GROUP_AUTHOR:
-               return (char *) DB_FIELD_MEDIA_AUTHOR;
-       case MEDIA_CONTENT_GROUP_PROVIDER:
-               return (char *) DB_FIELD_MEDIA_PROVIDER;
-       case MEDIA_CONTENT_GROUP_CONTENT_NAME:
-               return (char *) DB_FIELD_MEDIA_CONTENT_NAME;
-       case MEDIA_CONTENT_GROUP_CATEGORY:
-               return (char *) DB_FIELD_MEDIA_CATEGORY;
-       case MEDIA_CONTENT_GROUP_LOCATION_TAG:
-               return (char *) DB_FIELD_MEDIA_LOCATION_TAG;
-       case MEDIA_CONTENT_GROUP_AGE_RATING:
-               return (char *) DB_FIELD_MEDIA_AGE_RATING;
-       case MEDIA_CONTENT_GROUP_KEYWORD:
-               return (char *) DB_FIELD_MEDIA_KEYWORD;
-       case MEDIA_CONTENT_GROUP_WEATHER:
-               return (char *) DB_FIELD_MEDIA_WEATHER;
+               return DB_FIELD_MEDIA_RATING;
 #ifdef _USE_TVPD_MODE
        case MEDIA_CONTENT_GROUP_MODIFIED_MONTH:
-               return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
+               return DB_FIELD_MEDIA_MODIFIED_DATE;
        case MEDIA_CONTENT_GROUP_MODIFIED_DATE:
-               return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
+               return DB_FIELD_MEDIA_MODIFIED_DATE;
 #endif
 #ifdef _USE_SENIOR_MODE
        case MEDIA_CONTENT_GROUP_CONTACT:
-               return (char *) DB_FIELD_MEDIA_CONTACT;
+               return DB_FIELD_MEDIA_CONTACT;
 #endif
 #ifdef _USE_TVPD_MODE
        case MEDIA_CONTENT_GROUP_ALBUM:
-               return (char *) DB_FIELD_MEDIA_ALBUM;
+               return DB_FIELD_MEDIA_ALBUM;
        case MEDIA_PVR_GROUP_DURATION:
-               return (char *) DB_FIELD_PVR_DURATION;
+               return DB_FIELD_PVR_DURATION;
        case MEDIA_PVR_GROUP_TIME_ZONE:
-               return (char *) DB_FIELD_PVR_TIME_ZONE;
+               return DB_FIELD_PVR_TIME_ZONE;
        case MEDIA_PVR_GROUP_PTC:
-               return (char *) DB_FIELD_PVR_PTC;
+               return DB_FIELD_PVR_PTC;
        case MEDIA_PVR_GROUP_MAJOR:
-               return (char *) DB_FIELD_PVR_MAJOR;
+               return DB_FIELD_PVR_MAJOR;
        case MEDIA_PVR_GROUP_MINOR:
-               return (char *) DB_FIELD_PVR_MINOR;
+               return DB_FIELD_PVR_MINOR;
        case MEDIA_PVR_GROUP_CHANNEL_TYPE:
-               return (char *) DB_FIELD_PVR_CHANNEL_TYPE;
+               return DB_FIELD_PVR_CHANNEL_TYPE;
        case MEDIA_PVR_GROUP_CHANNEL_NAME:
-               return (char *) DB_FIELD_PVR_CHANNEL_NAME;
+               return DB_FIELD_PVR_CHANNEL_NAME;
        case MEDIA_PVR_GROUP_CHANNEL_NUM:
-               return (char *) DB_FIELD_PVR_CHANNEL_NUM;
+               return DB_FIELD_PVR_CHANNEL_NUM;
        case MEDIA_PVR_GROUP_PROGRAM_TITLE:
-               return (char *) DB_FIELD_PVR_PROGRAM_TITLE;
+               return DB_FIELD_PVR_PROGRAM_TITLE;
        case MEDIA_PVR_GROUP_PROGRAM_NUM:
-               return (char *) DB_FIELD_PVR_PROGRAM_NUM;
+               return DB_FIELD_PVR_PROGRAM_NUM;
        case MEDIA_PVR_GROUP_PROGRAM_CRID:
-               return (char *) DB_FIELD_PVR_PROGRAM_CRID;
+               return DB_FIELD_PVR_PROGRAM_CRID;
        case MEDIA_PVR_GROUP_GUIDANCE:
-               return (char *) DB_FIELD_PVR_GUIDANCE;
+               return DB_FIELD_PVR_GUIDANCE;
        case MEDIA_PVR_GROUP_SYNOPSIS:
-               return (char *) DB_FIELD_PVR_SYNOPSIS;
+               return DB_FIELD_PVR_SYNOPSIS;
        case MEDIA_PVR_GROUP_GENRE:
-               return (char *) DB_FIELD_PVR_GENRE;
+               return DB_FIELD_PVR_GENRE;
        case MEDIA_PVR_GROUP_LANGUAGE:
-               return (char *) DB_FIELD_PVR_LANGUAGE;
+               return DB_FIELD_PVR_LANGUAGE;
        case MEDIA_PVR_GROUP_EMBARGO_TIME:
-               return (char *) DB_FIELD_PVR_EMBARGO_TIME;
+               return DB_FIELD_PVR_EMBARGO_TIME;
        case MEDIA_PVR_GROUP_EXPIRY_TIME:
-               return (char *) DB_FIELD_PVR_EXPIRY_TIME;
+               return DB_FIELD_PVR_EXPIRY_TIME;
        case MEDIA_PVR_GROUP_START_TIME:
-               return (char *) DB_FIELD_PVR_START_TIME;
+               return DB_FIELD_PVR_START_TIME;
        case MEDIA_PVR_GROUP_PROGRAM_START_TIME:
-               return (char *) DB_FIELD_PVR_PROGRAM_START_TIME;
+               return DB_FIELD_PVR_PROGRAM_START_TIME;
        case MEDIA_PVR_GROUP_PROGRAM_END_TIME:
-               return (char *) DB_FIELD_PVR_PROGRAM_END_TIME;
+               return DB_FIELD_PVR_PROGRAM_END_TIME;
        case MEDIA_PVR_GROUP_PROGRAM_DATE:
-               return (char *) DB_FIELD_PVR_PROGRAM_DATE;
+               return DB_FIELD_PVR_PROGRAM_DATE;
        case MEDIA_PVR_GROUP_PARENTAL_RATING:
-               return (char *) DB_FIELD_PVR_PARENTAL_RATING;
+               return DB_FIELD_PVR_PARENTAL_RATING;
        case MEDIA_PVR_GROUP_TIMER_RECORD:
-               return (char *) DB_FIELD_PVR_TIMER_RECORD;
+               return DB_FIELD_PVR_TIMER_RECORD;
        case MEDIA_PVR_GROUP_SERIES_RECORD:
-               return (char *) DB_FIELD_PVR_SERIES_RECORD;
+               return DB_FIELD_PVR_SERIES_RECORD;
        case MEDIA_PVR_GROUP_HD:
-               return (char *) DB_FIELD_PVR_HD;
+               return DB_FIELD_PVR_HD;
        case MEDIA_PVR_GROUP_SUBTITLE:
-               return (char *) DB_FIELD_PVR_SUBTITLE;
+               return DB_FIELD_PVR_SUBTITLE;
        case MEDIA_PVR_GROUP_TTX:
-               return (char *) DB_FIELD_PVR_TTX;
+               return DB_FIELD_PVR_TTX;
        case MEDIA_PVR_GROUP_AD:
-               return (char *) DB_FIELD_PVR_AD;
+               return DB_FIELD_PVR_AD;
        case MEDIA_PVR_GROUP_HARDOF_HEARINGRADIO:
-               return (char *) DB_FIELD_PVR_HARDOF_HEARINGRADIO;
+               return DB_FIELD_PVR_HARDOF_HEARINGRADIO;
        case MEDIA_PVR_GROUP_DATA_SERVICE:
-               return (char *) DB_FIELD_PVR_DATA_SERVICE;
+               return DB_FIELD_PVR_DATA_SERVICE;
        case MEDIA_PVR_GROUP_CONTENT_LOCK:
-               return (char *) DB_FIELD_PVR_CONTENT_LOCK;
+               return DB_FIELD_PVR_CONTENT_LOCK;
        case MEDIA_PVR_GROUP_CONTENT_WATCH:
-               return (char *) DB_FIELD_PVR_CONTENT_WATCH;
+               return DB_FIELD_PVR_CONTENT_WATCH;
        case MEDIA_PVR_GROUP_HAS_AUDIO_ONLY:
-               return (char *) DB_FIELD_PVR_HAS_AUDIO_ONLY;
+               return DB_FIELD_PVR_HAS_AUDIO_ONLY;
        case MEDIA_PVR_GROUP_IS_LOCAL_RECORDED:
-               return (char *) DB_FIELD_PVR_IS_LOCAL_RECORD;
+               return DB_FIELD_PVR_IS_LOCAL_RECORD;
        case MEDIA_PVR_GROUP_RESOLUTION:
-               return (char *) DB_FIELD_PVR_RESOLUTION;
+               return DB_FIELD_PVR_RESOLUTION;
        case MEDIA_PVR_GROUP_ASPECTRATIO:
-               return (char *) DB_FIELD_PVR_ASPECTRATIO;
+               return DB_FIELD_PVR_ASPECTRATIO;
        case MEDIA_PVR_GROUP_MODIFIED_MONTH:
-               return (char *) DB_FIELD_PVR_MODIFIED_DATE;
+               return DB_FIELD_PVR_MODIFIED_DATE;
        case MEDIA_PVR_GROUP_MODIFIED_DATE:
-               return (char *) DB_FIELD_PVR_MODIFIED_DATE;
+               return DB_FIELD_PVR_MODIFIED_DATE;
        case MEDIA_PVR_GROUP_SPORTS_TYPE:
-               return (char *) DB_FIELD_PVR_SPORTS_TYPE;
+               return DB_FIELD_PVR_SPORTS_TYPE;
        case MEDIA_PVR_GROUP_GUIDANCE_LENGTH:
-               return (char *) DB_FIELD_PVR_GUIDANCE_LENGTH;
+               return DB_FIELD_PVR_GUIDANCE_LENGTH;
        case MEDIA_PVR_GROUP_TVMODE:
-               return (char *) DB_FIELD_PVR_TVMODE;
+               return DB_FIELD_PVR_TVMODE;
        case MEDIA_PVR_GROUP_PLAY_COUNT:
-               return (char *) DB_FIELD_PVR_PLAY_COUNT;
+               return DB_FIELD_PVR_PLAY_COUNT;
        case MEDIA_PVR_GROUP_PRIVATE_DATA:
-               return (char *) DB_FIELD_PVR_PRIVATE_DATA;
+               return DB_FIELD_PVR_PRIVATE_DATA;
        case MEDIA_UHD_GROUP_CONTENT_TITLE:
-               return (char *) DB_FIELD_UHD_CONTENT_TITLE;
+               return DB_FIELD_UHD_CONTENT_TITLE;
        case MEDIA_UHD_GROUP_RELEASE_DATE:
-               return (char *) DB_FIELD_UHD_RELEASE_DATE;
+               return DB_FIELD_UHD_RELEASE_DATE;
        case MEDIA_UHD_GROUP_SUB_TYPE:
-               return (char *) DB_FIELD_UHD_SUB_TYPE;
+               return DB_FIELD_UHD_SUB_TYPE;
        case MEDIA_UHD_GROUP_FILE_NAME:
-               return (char *) DB_FIELD_UHD_FILE_NAME;
+               return DB_FIELD_UHD_FILE_NAME;
        case MEDIA_UHD_GROUP_PLAYED_COUNT:
-               return (char *) DB_FIELD_UHD_PLAYED_COUNT;
+               return DB_FIELD_UHD_PLAYED_COUNT;
 #endif
        default:
                return NULL;
@@ -200,142 +179,96 @@ static char * __media_db_get_group_name(media_group_e group)
        return NULL;
 }
 
-static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query)
+static int __media_db_make_query(filter_h filter, char **condition_query, char **option_query)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
-       filter_s *_filter = NULL;
-
-       if (filter != NULL) {
-               _filter = (filter_s*)filter;
-
-               if (STRING_VALID(_filter->condition)) {
-                       ret = _media_filter_attribute_generate(attr, filter, condition_query);
-                       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
-               }
+       filter_s *_filter = (filter_s *)filter;
 
-               if (_filter->is_full_order == false) {
-                       /* Process for filter v1 */
-                       ret = _media_filter_attribute_option_generate(attr, filter, option_query);
-                       if (ret != MEDIA_CONTENT_ERROR_NONE) {
-                               SAFE_FREE(*condition_query);
-                               return ret;
-                       }
-               } else {
-                       /* Process for filter v2 */
-                       ret = _media_filter_attribute_option_generate_with_full_query(attr, filter, option_query);
-                       if (ret != MEDIA_CONTENT_ERROR_NONE) {
-                               SAFE_FREE(*condition_query);
-                               return ret;
-                       }
-               }
+       media_content_retv_if(!_filter, MEDIA_CONTENT_ERROR_NONE);
 
-               if (STRING_VALID(*condition_query)) {
-                       SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, select_query_size);
-                       SAFE_STRLCAT(select_query, QUERY_KEYWORD_AND, select_query_size);
-               }
+       if (STRING_VALID(_filter->condition)) {
+               ret = _media_filter_build_condition(_filter->is_full_condition, _filter->condition, _filter->condition_collate_type, condition_query);
+               media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
        }
 
+       ret = _media_filter_build_option(filter, option_query);
+       if (ret != MEDIA_CONTENT_ERROR_NONE)
+               g_free(*condition_query);
+
        return ret;
 }
 
+#ifdef _USE_TVPD_MODE
 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
 {
        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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
-
-       attr = _content_get_attirbute_handle();
-       memset(select_query, 0x00, sizeof(select_query));
+       filter_s *_filter = (filter_s *)filter;
 
        switch (group_type) {
-       case MEDIA_GROUP_NONE:
-       case MEDIA_GROUP_TAG_BY_MEDIA_ID:
-       case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
-       case MEDIA_GROUP_FACE_BY_MEDIA_ID:
-               {
-                       media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-                       return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-               }
-               break;
        case MEDIA_GROUP_ALBUM:
-               attr = _content_get_alias_attirbute_handle();
-
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id);
+                       select_query = g_strdup_printf(SELECT_ALBUM_COUNT, _filter->storage_id);
                else
-                       snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_VIEW_MEDIA);
-
+                       select_query = g_strdup_printf(SELECT_ALBUM_COUNT, DB_VIEW_MEDIA);
                break;
-       case MEDIA_GROUP_FOLDER:
-               attr = _content_get_alias_attirbute_handle();
 
+       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, _filter->storage_id);
+                       select_query = g_strdup_printf(SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
                else
-                       snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_VIEW_MEDIA);
-
+                       select_query = g_strdup_printf(SELECT_FOLDER_COUNT, DB_VIEW_MEDIA);
                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:
-               attr = _content_get_alias_attirbute_handle();
 
+       case MEDIA_GROUP_BOOKMARK:
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id);
+                       select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT, _filter->storage_id);
                else
-                       snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_VIEW_MEDIA);
+                       select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT, DB_VIEW_MEDIA);
 
                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:
-               attr = _content_get_alias_attirbute_handle();
 
+       case MEDIA_GROUP_FACE:
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, _filter->storage_id);
+                       select_query = g_strdup_printf(SELECT_FACE_COUNT, _filter->storage_id);
                else
-                       snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, DB_VIEW_MEDIA);
+                       select_query = g_strdup_printf(SELECT_FACE_COUNT, DB_VIEW_MEDIA);
                break;
-#ifdef _USE_TVPD_MODE
-       case MEDIA_GROUP_PVR:
-       case MEDIA_GROUP_UHD:
-#endif
+
        default:
-               {
-                       media_content_error("Invalid group type [%d]", group_type);
-                       return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-               }
-               break;
+               media_content_error("Invalid group type [%d]", group_type);
+               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
-       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_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);
 
@@ -349,12 +282,10 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       char *tmp_option = NULL;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
-#ifdef _USE_TVPD_MODE
        if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
@@ -371,32 +302,24 @@ int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *g
                else
                        snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
        }
-#else
-       if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __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), DB_VIEW_MEDIA);
-#endif
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       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, condition_query, sizeof(select_query));
-       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);
+       if (option_query) {
+               tmp_option = g_strconcat(option_query, ")", NULL);
+               g_free(option_query);
+               option_query = tmp_option;
+       } else {
+               SAFE_STRLCAT(select_query, ")", sizeof(select_query));
+       }
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_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);
 
@@ -411,12 +334,8 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
-
-       attr = _content_get_attirbute_handle();
+       filter_s *_filter = (filter_s *)filter;
        memset(select_query, 0x00, sizeof(select_query));
-#ifdef _USE_TVPD_MODE
        if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
@@ -433,16 +352,10 @@ int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_
                else
                        snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
        }
-#else
-       if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __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), DB_VIEW_MEDIA);
-#endif
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -462,7 +375,7 @@ int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_
 
        return ret;
 }
-#ifdef _USE_TVPD_MODE
+
 int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
@@ -472,14 +385,12 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
        memset(group_query, 0x00, sizeof(group_query));
 
-       char* group_name = __media_db_get_group_name(group);
+       const char* group_name = __media_db_get_group_name(group);
        if (!STRING_VALID(group_name)) {
                ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
                media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -502,7 +413,7 @@ int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, me
                        snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
        }
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
        if (STRING_VALID(option_query))
@@ -510,7 +421,7 @@ int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, me
        else
                snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, group_query);
+       ret = _content_query_prepare(select_query, condition_query, group_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -531,7 +442,161 @@ int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, me
 
        return ret;
 }
+#else
+int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       sqlite3_stmt *stmt = NULL;
+       char *select_query = NULL;
+       char *condition_query = NULL;
+       char *option_query = NULL;
+       filter_s *_filter = (filter_s *)filter;
+
+       switch (group_type) {
+       case MEDIA_GROUP_ALBUM:
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       select_query = g_strdup_printf(SELECT_ALBUM_COUNT_BY_STORAGE_ID, _filter->storage_id);
+               else
+                       select_query = g_strdup(SELECT_ALBUM_COUNT);
+               break;
+
+       case MEDIA_GROUP_FOLDER:
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       select_query = g_strdup_printf(SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id);
+               else
+                       select_query = g_strdup(SELECT_FOLDER_COUNT);
+               break;
+
+       case MEDIA_GROUP_PLAYLIST:
+               select_query = g_strdup(SELECT_PLAYLIST_COUNT);
+               break;
+
+       case MEDIA_GROUP_TAG:
+               select_query = g_strdup(SELECT_TAG_COUNT);
+               break;
+
+       case MEDIA_GROUP_BOOKMARK:
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT_BY_STORAGE_ID, _filter->storage_id);
+               else
+                       select_query = g_strdup(SELECT_BOOKMARK_COUNT);
+
+               break;
+
+       case MEDIA_GROUP_STORAGE:
+               select_query = g_strdup(SELECT_STORAGE_COUNT);
+               break;
+
+       case MEDIA_GROUP_FACE:
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       select_query = g_strdup_printf(SELECT_FACE_COUNT_BY_STORAGE_ID, _filter->storage_id);
+               else
+                       select_query = g_strdup(SELECT_FACE_COUNT);
+               break;
+
+       default:
+               media_content_error("Invalid group type [%d]", group_type);
+               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
+
+       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 = sqlite3_column_int(stmt, 0);
+
+       SQLITE3_FINALIZE(stmt);
+
+       return ret;
+}
+
+int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       sqlite3_stmt *stmt = NULL;
+       char *select_query = NULL;
+       char *condition_query = NULL;
+       char *option_query = NULL;
+       filter_s *_filter = (filter_s *)filter;
+
+       if ((_filter != NULL) && STRING_VALID(_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
+               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);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
+
+       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 = sqlite3_column_int(stmt, 0);
+
+       SQLITE3_FINALIZE(stmt);
+
+       return ret;
+}
+
+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 = NULL;
+       char *condition_query = NULL;
+       char *option_query = NULL;
+       char *name = NULL;
+       sqlite3_stmt *stmt = NULL;
+       filter_s *_filter = (filter_s *)filter;
+
+       if ((_filter != NULL) && STRING_VALID(_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
+               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);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
+
+       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);
+
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
+
+               if (callback(name, user_data) == false) {
+                       SAFE_FREE(name);
+                       break;
+               }
+
+               SAFE_FREE(name);
+       }
+
+       SQLITE3_FINALIZE(stmt);
+
+       return ret;
+}
 #endif
+
 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
@@ -539,21 +604,24 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_alias_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
-
+#ifdef _USE_TVPD_MODE
        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id);
        else
                snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_VIEW_MEDIA);
-
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+#else
+       if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+               snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST_BY_STORAGE_ID, _filter->storage_id);
+       else
+               snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST);
+#endif
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -567,7 +635,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));
@@ -592,22 +660,24 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_alias_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
-
+#ifdef _USE_TVPD_MODE
        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
        else
                snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_VIEW_MEDIA);
-
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+#else
+       if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+               snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id);
+       else
+               snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST);
+#endif
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
-
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -624,10 +694,8 @@ 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->modified_time = (int)sqlite3_column_int(stmt, 4);
-               _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 5));
-               _folder->folder_order = (int)sqlite3_column_int(stmt, 6);
+               _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) {
                        media_folder_destroy((media_folder_h) _folder);
@@ -645,24 +713,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;
-       attribute_h attr = NULL;
 
-       attr = _content_get_attirbute_handle();
-       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, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       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);
@@ -676,7 +734,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));
 
@@ -695,29 +753,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;
-       attribute_h attr = NULL;
 
-       attr = _content_get_attirbute_handle();
-       memset(select_query, 0x00, sizeof(select_query));
+       select_query = g_strdup_printf(SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
 
-       /*snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ID_FROM_PLAYLIST_VIEW, playlist_id);*/
-       snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
-       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
-
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_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);
 
        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));
 
@@ -745,31 +802,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;
-       attribute_h attr = NULL;
-
-       attr = _content_get_attirbute_handle();
-       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);
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
-       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+       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);
 
-       SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               g_free(select_query);
+               return ret;
+       }
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_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);
 
        while (sqlite3_step(stmt) == SQLITE_ROW) {
@@ -781,7 +833,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) {
@@ -803,13 +855,10 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
-
-       attr = _content_get_alias_attirbute_handle();
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
-
+#ifdef _USE_TVPD_MODE
        if (STRING_VALID(media_id)) {   //get bookmark by media_id
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
@@ -821,11 +870,21 @@ int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark
                else
                        snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, DB_VIEW_MEDIA);
        }
+#else
+       if (STRING_VALID(media_id)) {   //get bookmark by media_id
+               snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, media_id);
+       } else {
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_STORAGE_ID, _filter->storage_id);
+               else
+                       snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST);
+       }
+#endif
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -839,9 +898,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));
 
@@ -866,13 +925,10 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
-
-       attr = _content_get_alias_attirbute_handle();
+       filter_s *_filter = (filter_s *)filter;
 
        memset(select_query, 0x00, sizeof(select_query));
-
+#ifdef _USE_TVPD_MODE
        if (STRING_VALID(media_id)) {   //get face by media_id
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
@@ -884,11 +940,20 @@ int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb call
                else
                        snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, DB_VIEW_MEDIA);
        }
-
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+#else
+       if (STRING_VALID(media_id)) {   //get face by media_id
+               snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, media_id);
+       } else {
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_STORAGE_ID, _filter->storage_id);
+               else
+                       snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST);
+       }
+#endif
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -902,13 +967,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) {
@@ -932,36 +997,48 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
 
-       if (group_type == MEDIA_GROUP_ALBUM) {
+       switch (group_type) {
+       case MEDIA_GROUP_ALBUM:
+#ifdef _USE_TVPD_MODE
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
                else
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
-       } else if (group_type == MEDIA_GROUP_PLAYLIST) {
+#else
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM_BY_STORAGE_ID, group_id, _filter->storage_id);
+               else
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, group_id);
+#endif
+               break;
+
+       case MEDIA_GROUP_PLAYLIST:
                snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
-       } else if (group_type == MEDIA_GROUP_TAG) {
+               break;
+
+       case MEDIA_GROUP_TAG:
                snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_TAG, group_id);
-       } else {
+               break;
+
+       default:
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        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);
 
@@ -973,107 +1050,138 @@ int _media_db_get_group_item_count(const char *group_name, filter_h filter, grou
        int ret = MEDIA_CONTENT_ERROR_NONE;
        sqlite3_stmt *stmt = NULL;
        char select_query[MAX_QUERY_SIZE] = {0, };
-       char *tmp_query = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
-       bool is_simple = FALSE;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       char *tmp_option = NULL;
+       bool need_bracket = false;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
 
-       if (group_type == MEDIA_GROUP_NONE) {
-               /* There are 2 ways to get count for media table for performance
-                       If user wants to set offset and count, use SQL SELECT_MEDIA_COUNT_FROM_MEDIA.
-                       If user wants to get count without setting count, SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE */
-               if (_filter && ((_filter->offset < 0) && (_filter->count < 0))) {
-                               if (STRING_VALID(_filter->storage_id))
-                                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
-                               else
-                                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
-                               is_simple = TRUE;
+       switch (group_type) {
+       case MEDIA_GROUP_NONE:
+               if (!_filter) {
+#ifdef _USE_TVPD_MODE
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
+#else
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE);
+#endif
+                       break;
+               }
+
+               if (_filter->offset < 0 && _filter->count < 0) {
+#ifdef _USE_TVPD_MODE
+                       if (STRING_VALID(_filter->storage_id))
+                               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
+                       else
+                               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
+#else
+                       if (STRING_VALID(_filter->storage_id))
+                               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE_BY_STORAGE_ID, _filter->storage_id);
+                       else
+                               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE);
+#endif
                } else {
-                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_VIEW_MEDIA);
+#ifdef _USE_TVPD_MODE
+                       if (STRING_VALID(_filter->storage_id))
+                               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, _filter->storage_id);
+                       else
+                               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_VIEW_MEDIA);
+#else
+                       if (STRING_VALID(_filter->storage_id))
+                               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_BY_STORAGE_ID, _filter->storage_id);
+                       else
+                               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA);
+
+#endif
+                       need_bracket = true;
                }
-       } else if (group_type == MEDIA_GROUP_FOLDER) {
-               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
+               break;
+
+       case MEDIA_GROUP_FOLDER:
+#ifdef _USE_TVPD_MODE
+               if (_filter && STRING_VALID(_filter->storage_id))
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
                else
-                       tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
+#else
+               if (_filter && STRING_VALID(_filter->storage_id))
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_FOLDER_BY_STORAGE_ID, group_name, _filter->storage_id);
+               else
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_FOLDER, group_name);
+#endif
+               break;
 
-               SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
-       } else if (group_type == MEDIA_GROUP_TAG_BY_MEDIA_ID) {
+       case MEDIA_GROUP_TAG_BY_MEDIA_ID:
                snprintf(select_query, sizeof(select_query), SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
-       } else if (group_type == MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID) {
-               attr = _content_get_alias_attirbute_handle();
+               break;
 
-               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
+       case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
+#ifdef _USE_TVPD_MODE
+               if (_filter && STRING_VALID(_filter->storage_id))
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
                else
-                       tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
-
-               SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
-       } else if (group_type == MEDIA_GROUP_STORAGE) {
-               tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name);
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
+#else
+               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, group_name);
+#endif
+               break;
 
-               SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
-       } else if (group_type == MEDIA_GROUP_FACE_BY_MEDIA_ID) {
-               attr = _content_get_alias_attirbute_handle();
+       case MEDIA_GROUP_STORAGE:
+#ifdef _USE_TVPD_MODE
+               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name);
+#else
+               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_STORAGE, group_name);
+#endif
+               break;
 
-               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
+       case MEDIA_GROUP_FACE_BY_MEDIA_ID:
+#ifdef _USE_TVPD_MODE
+               if (_filter && STRING_VALID(_filter->storage_id))
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
                else
-                       tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_FACE_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
+#else
+               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_FACE_COUNT_BY_MEDIA_ID, group_name);
+#endif
+               break;
 
-               SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
 #ifdef _USE_TVPD_MODE
-       } else if (group_type == MEDIA_GROUP_PVR) {
-               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+       case MEDIA_GROUP_PVR:
+               if (_filter && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
                else
-                       SAFE_STRLCAT(select_query, SELECT_PVR_COUNT, sizeof(select_query));
-       } else if (group_type == MEDIA_GROUP_UHD) {
-               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       SAFE_STRLCPY(select_query, SELECT_PVR_COUNT, sizeof(select_query));
+               break;
+
+       case MEDIA_GROUP_UHD:
+               if (_filter && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
                else
-                       SAFE_STRLCAT(select_query, SELECT_UHD_COUNT, sizeof(select_query));
+                       SAFE_STRLCPY(select_query, SELECT_UHD_COUNT, sizeof(select_query));
+               break;
 #endif
-       } else {
+       default:
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
-       if (ret != MEDIA_CONTENT_ERROR_NONE) {
-               if (tmp_query != NULL)
-                       SQLITE3_SAFE_FREE(tmp_query);
-               return ret;
-       }
-
-       if (group_type == MEDIA_GROUP_NONE) {
-               SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
-               if (STRING_VALID(condition_query))
-                       SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
-               if (STRING_VALID(option_query))
-                       SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
-
-               if (!is_simple)
-                       SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
+       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-               SAFE_FREE(condition_query);
-               SAFE_FREE(option_query);
+       if (need_bracket) {
+               tmp_option = g_strconcat(option_query, ")", NULL);
+               g_free(option_query);
+               option_query = tmp_option;
        }
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
-       if (tmp_query != NULL)
-               SQLITE3_SAFE_FREE(tmp_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        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);
 
@@ -1087,36 +1195,62 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
 
-       if (group_type == MEDIA_GROUP_ALBUM) {
+       switch (group_type) {
+       case MEDIA_GROUP_ALBUM:
+#ifdef _USE_TVPD_MODE
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
                else
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
-       } else if (group_type == MEDIA_GROUP_PLAYLIST) {
+#else
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM_BY_STORAGE_ID, group_id, _filter->storage_id);
+               else
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, group_id);
+#endif
+               break;
+
+       case MEDIA_GROUP_PLAYLIST:
+#ifdef _USE_TVPD_MODE
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
                else
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_VIEW_MEDIA, group_id);
-       } else if (group_type == MEDIA_GROUP_TAG) {
+#else
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST_BY_STORAGE_ID, group_id, _filter->storage_id);
+               else
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, group_id);
+#endif
+               break;
+
+       case MEDIA_GROUP_TAG:
+#ifdef _USE_TVPD_MODE
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
                else
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_VIEW_MEDIA, group_id);
-       } else {
+#else
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG_BY_STORAGE_ID, group_id, _filter->storage_id);
+               else
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, group_id);
+#endif
+               break;
+
+       default:
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -1151,33 +1285,53 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
 
-       if (group_type == MEDIA_GROUP_NONE) {
+       switch (group_type) {
+       case MEDIA_GROUP_NONE:
+#ifdef _USE_TVPD_MODE
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, _filter->storage_id);
                else
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_VIEW_MEDIA);
-       } else if (group_type == MEDIA_GROUP_FOLDER) {
+#else
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM_BY_STORAGE_ID, _filter->storage_id);
+               else
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM);
+#endif
+               break;
+
+       case MEDIA_GROUP_FOLDER:
+#ifdef _USE_TVPD_MODE
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
                else
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
-       } else if (group_type == MEDIA_GROUP_STORAGE) {
+#else
+               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, group_name);
+#endif
+               break;
+
+       case MEDIA_GROUP_STORAGE:
+#ifdef _USE_TVPD_MODE
                snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name, group_name);
-       } else {
+#else
+               snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name);
+#endif
+               break;
+
+       default:
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -1216,11 +1370,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;
-       attribute_h attr = NULL;
-       filter_s *_filter1 = (filter_s*)filter1;
-       filter_s *_filter2 = (filter_s*)filter2;
-
-       attr = _content_get_attirbute_handle();
+       filter_s *_filter1 = (filter_s *)filter1;
+       filter_s *_filter2 = (filter_s *)filter2;
 
        memset(select_query1, 0x00, sizeof(select_query1));
 
@@ -1229,7 +1380,7 @@ int _media_db_get_group_item_by_union_select(const char *group_name, filter_h fi
        else
                snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
 
-       ret = __media_db_make_query(filter1, attr, select_query1, sizeof(select_query1), &condition_query1, &option_query1);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        if (ret != MEDIA_CONTENT_ERROR_NONE) {
                SAFE_FREE(condition_query1);
                SAFE_FREE(option_query1);
@@ -1244,7 +1395,7 @@ int _media_db_get_group_item_by_union_select(const char *group_name, filter_h fi
        else
                snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
 
-       ret = __media_db_make_query(filter2, attr, select_query2, sizeof(select_query2), &condition_query2, &option_query2);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        if (ret != MEDIA_CONTENT_ERROR_NONE) {
                SAFE_FREE(condition_query1);
                SAFE_FREE(option_query1);
@@ -1290,23 +1441,19 @@ int _media_db_get_media_group_item_count(const char *group_name, filter_h filter
        int ret = MEDIA_CONTENT_ERROR_NONE;
        sqlite3_stmt *stmt = NULL;
        char select_query[MAX_QUERY_SIZE] = {0, };
-       char *tmp_query = NULL;
+       char *tmp_option = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
 #ifdef _USE_TVPD_MODE
        if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
                if (group_name != NULL) {
                        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                               tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
+                               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
                        else
-                               tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
-
-                       SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
+                               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
                } else {
                        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                                snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
@@ -1316,11 +1463,9 @@ int _media_db_get_media_group_item_count(const char *group_name, filter_h filter
        } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
                if (group_name != NULL) {
                        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                               tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
+                               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
                        else
-                               tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
-
-                       SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
+                               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
                } else {
                        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                                snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
@@ -1330,11 +1475,9 @@ int _media_db_get_media_group_item_count(const char *group_name, filter_h filter
        } else {/*uhd content*/
                if (group_name != NULL) {
                        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                               tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
+                               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
                        else
-                               tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
-
-                       SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
+                               sqlite3_snprintf(sizeof(select_query), select_query, SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
                } else {
                        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                                snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
@@ -1344,46 +1487,36 @@ int _media_db_get_media_group_item_count(const char *group_name, filter_h filter
        }
 #else
        if (group_name != NULL) {
-               if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) {
-                       tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
-                       SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
-               } else {
-                       tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
-                       SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
-               }
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP_BY_STORAGE_ID, __media_db_get_group_name(group), group_name, _filter->storage_id);
+               else
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
        } else {
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
                else
-                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
        }
 #endif
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
-       if (ret != MEDIA_CONTENT_ERROR_NONE) {
-               if (tmp_query != NULL)
-                       SQLITE3_SAFE_FREE(tmp_query);
-               return ret;
-       }
-
-       SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
-       if (STRING_VALID(condition_query))
-               SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
-       if (STRING_VALID(option_query))
-               SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
-       SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
+       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       SAFE_FREE(condition_query);
-       SAFE_FREE(option_query);
+       /* If 'filter' is not NULL, 'option_query' must be created. */
+       if (option_query) {
+               tmp_option = g_strconcat(option_query, ")", NULL);
+               g_free(option_query);
+               option_query = tmp_option;
+       } else {
+               SAFE_STRLCAT(select_query, ")", sizeof(select_query));
+       }
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
-       if (tmp_query != NULL)
-               SQLITE3_SAFE_FREE(tmp_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        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);
 
@@ -1394,40 +1527,41 @@ int _media_db_get_media_group_item(const char *group_name, filter_h filter, medi
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        char select_query[MAX_QUERY_SIZE] = {0, };
-       char *tmp_query = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
-
+#ifdef _USE_TVPD_MODE
        if (group_name != NULL) {
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
                else
-                       tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
-
-               SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
        } else {
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
                else
                        snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
        }
-
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
-       if (ret != MEDIA_CONTENT_ERROR_NONE) {
-               if (tmp_query != NULL)
-                       SQLITE3_SAFE_FREE(tmp_query);
-               return ret;
+#else
+       if (group_name != NULL) {
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP_BY_STORAGE_ID, __media_db_get_group_name(group), group_name, _filter->storage_id);
+               else
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, __media_db_get_group_name(group), group_name);
+       } else {
+               if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
+               else
+                       snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, __media_db_get_group_name(group));
        }
+#endif
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
+       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
-       if (tmp_query != NULL)
-               SQLITE3_SAFE_FREE(tmp_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -1458,24 +1592,14 @@ int _media_db_get_media_group_item(const char *group_name, filter_h filter, medi
 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
-       char select_query[DEFAULT_QUERY_SIZE] = {0, };
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       attribute_h attr = NULL;
-
-       attr = _content_get_attirbute_handle();
-       memset(select_query, 0x00, sizeof(select_query));
-
-       if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_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, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(SELECT_STORAGE_LIST, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -1491,7 +1615,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);
@@ -1505,28 +1629,48 @@ int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user
 
        return ret;
 }
+
+int _media_db_get_storage_id_by_media_id(const char *media_id, char **storage_id)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       sqlite3_stmt *stmt = NULL;
+       char *select_query = NULL;
+
+       select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
+
+       ret = _content_get_result(select_query, &stmt);
+       SQLITE3_SAFE_FREE(select_query);
+       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+
+       if (sqlite3_step(stmt) == SQLITE_ROW) {
+               *storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
+       } else {
+               media_content_error("Invalid media_id[%s]", media_id);
+               ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+       }
+
+       SQLITE3_FINALIZE(stmt);
+
+       return ret;
+}
+
 #ifdef _USE_TVPD_MODE
 int _media_db_get_pvr_group_item(const char *group_name, filter_h filter, media_group_e group, media_pvr_cb callback, void *user_data)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        char select_query[DEFAULT_QUERY_SIZE] = {0, };
-       char *tmp_query = NULL;
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
 
        if (group_name != NULL) {
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
-                       tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
                else
-                       tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
-
-               SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
+                       sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
        } else {
                if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
                        snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
@@ -1534,16 +1678,10 @@ int _media_db_get_pvr_group_item(const char *group_name, filter_h filter, media_
                        snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
        }
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
-       if (ret != MEDIA_CONTENT_ERROR_NONE) {
-               if (tmp_query != NULL)
-                       sqlite3_free(tmp_query);
-               return ret;
-       }
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
+       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
-       if (tmp_query != NULL)
-               sqlite3_free(tmp_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -1584,6 +1722,7 @@ typedef enum {
        MEDIA_PVR_CHANNEL_TYPE,
        MEDIA_PVR_CHANNEL_NAME,
        MEDIA_PVR_CHANNEL_NUM,
+       MEDIA_PVR_SERVICE_PROFILE,
        MEDIA_PVR_PROGRAM_TITLE,
        MEDIA_PVR_PROGRAM_NUM,
        MEDIA_PVR_PROGRAM_CRID,
@@ -1636,17 +1775,19 @@ 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 = sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
 
-       _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
+       _pvr->ptc = sqlite3_column_int(stmt, MEDIA_PVR_PTC);
 
-       _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC);
+       _pvr->major = sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
 
-       _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
+       _pvr->minor = sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
 
-       _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
+       _pvr->channel_type = sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
 
-       _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
+       _pvr->service_profile = (unsigned int)sqlite3_column_int(stmt, MEDIA_PVR_SERVICE_PROFILE);
 
        if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME)))
                _pvr->channel_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
@@ -1657,7 +1798,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));
@@ -1680,57 +1821,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;
 }
@@ -1742,10 +1883,8 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
 
        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
@@ -1753,10 +1892,10 @@ int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
        else
                SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
@@ -1784,38 +1923,7 @@ int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
 
        return ret;
 }
-#endif
 
-int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id)
-{
-       int ret = MEDIA_CONTENT_ERROR_NONE;
-       sqlite3_stmt *stmt = NULL;
-       char *select_query = NULL;
-
-       select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
-
-       ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
-       SQLITE3_SAFE_FREE(select_query);
-       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
-
-       if (sqlite3_step(stmt) == SQLITE_ROW) {
-               if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) {
-                       if (!SAFE_STRLCPY(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_CONTENT_UUID_SIZE+1)) {
-                               media_content_error("Storage id copy fail");
-                               ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION;
-                       }
-               }
-       } else {
-               media_content_error("There's no media!!");
-               ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-       }
-
-       SQLITE3_FINALIZE(stmt);
-
-       return ret;
-}
-
-#ifdef _USE_TVPD_MODE
 typedef enum {
        MEDIA_UHD_MEDIA_ID = 0,
        MEDIA_UHD_STORAGE_ID,
@@ -1859,10 +1967,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;
 }
@@ -1874,10 +1982,8 @@ 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;
-       attribute_h attr = NULL;
-       filter_s *_filter = (filter_s*)filter;
+       filter_s *_filter = (filter_s *)filter;
 
-       attr = _content_get_attirbute_handle();
        memset(select_query, 0x00, sizeof(select_query));
 
        if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
@@ -1885,10 +1991,10 @@ int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
        else
                SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
 
-       ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
+       ret = __media_db_make_query(filter, &condition_query, &option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
+       ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
        SAFE_FREE(condition_query);
        SAFE_FREE(option_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);