Improve filter function 86/227986/5 submit/tizen/20200319.005828
authorMinje Ahn <minje.ahn@samsung.com>
Wed, 18 Mar 2020 02:58:23 +0000 (11:58 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Wed, 18 Mar 2020 04:44:00 +0000 (13:44 +0900)
Change-Id: I7461af0138ba8eac098e364b137d8f8e7375ef9b
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
include/media_info_private.h
include_product/media_info_private.h
src/media_db.c
src/media_filter.c

index 2fcd384..ec414eb 100755 (executable)
@@ -548,9 +548,8 @@ 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 _media_db_get_storage_id_by_media_id(const char *media_id, char **storage_id);
 
-int _media_filter_attribute_generate(filter_h filter, char **generated_condition);
-int _media_filter_attribute_option_generate(filter_h filter, char **generated_option);
-int _media_filter_attribute_option_generate_with_full_query(filter_h filter, char **generated_option);
+int _media_filter_build_condition(bool is_full, const char *condition, media_content_collation_e collate_type, char **result);
+int _media_filter_build_option(filter_h filter, char **result);
 
 
 #define FONT_COLOR_RESET    "\033[0m"
index f61d93e..621002b 100755 (executable)
@@ -772,9 +772,8 @@ int _media_db_get_pvr_group_item(const char *group_name, filter_h filter, media_
 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data);
 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd);
 
-int _media_filter_attribute_generate(filter_h filter, char **generated_condition);
-int _media_filter_attribute_option_generate(filter_h filter, char **generated_option);
-int _media_filter_attribute_option_generate_with_full_query(filter_h filter, char **generated_option);
+int _media_filter_build_condition(bool is_full, const char *condition, media_content_collation_e collate_type, char **result);
+int _media_filter_build_option(filter_h filter, char **result);
 
 GMutex* _content_get_db_mutex(void);
 
index ca96b98..c706636 100755 (executable)
 #include <media_info_private.h>
 #include <media_util_private.h>
 
-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;
+               return DB_FIELD_MEDIA_ALTITUDE;
        case MEDIA_CONTENT_GROUP_RATING:
-               return (char *) DB_FIELD_MEDIA_RATING;
+               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;
@@ -182,33 +182,19 @@ static char * __media_db_get_group_name(media_group_e group)
 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;
+       filter_s *_filter = (filter_s *)filter;
 
-               if (STRING_VALID(_filter->condition)) {
-                       ret = _media_filter_attribute_generate(filter, condition_query);
-                       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
-               }
+       media_content_retv_if(!_filter, MEDIA_CONTENT_ERROR_NONE);
 
-               if (_filter->is_full_order == false) {
-                       /* Process for filter v1 */
-                       ret = _media_filter_attribute_option_generate(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(filter, option_query);
-                       if (ret != MEDIA_CONTENT_ERROR_NONE) {
-                               SAFE_FREE(*condition_query);
-                               return ret;
-                       }
-               }
+       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;
 }
 
index 985fbbe..93bbef1 100755 (executable)
@@ -45,159 +45,95 @@ static bool __is_pinyin_needed(void)
        return ret;
 }
 
-static char *__get_order_str(media_content_order_e order_enum)
+static const char *__get_order_str(media_content_order_e order_enum)
 {
        switch (order_enum) {
        case MEDIA_CONTENT_ORDER_ASC:
-               return (char *)"ASC ";
+               return "ASC ";
        case MEDIA_CONTENT_ORDER_DESC:
-               return (char *)"DESC ";
+               return "DESC ";
        default:
-               return (char *)" ";
+               return " ";
        }
 }
 
-static char *__get_collate_str(media_content_collation_e collate_type)
+static const char *__get_collate_str(media_content_collation_e collate_type)
 {
        switch (collate_type) {
        case MEDIA_CONTENT_COLLATE_NOCASE:
-               return (char *)"NOCASE ";
+               return " COLLATE NOCASE ";
        case MEDIA_CONTENT_COLLATE_RTRIM:
-               return (char *)"RTRIM ";
+               return " COLLATE RTRIM ";
        case MEDIA_CONTENT_COLLATE_LOCALIZED:
                if (__is_pinyin_needed())
-                       return (char *)"NOCASE ";
+                       return " COLLATE NOCASE ";
                else
-                       return (char *)"localized ";
-       default: return (char *)" ";
+                       return " COLLATE localized ";
+       default:
+               return " ";
        }
 }
 
-int _media_filter_attribute_generate(filter_h filter, char **generated_condition)
+static bool __check_collate_type(media_content_collation_e collate_type)
 {
-       int ret = MEDIA_CONTENT_ERROR_NONE;
-       filter_s *_filter = NULL;
-       char tmp_condition[MAX_QUERY_SIZE] = {0, };
-
-       media_content_retvm_if(filter == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid filter");
-       media_content_retvm_if(generated_condition == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid generated_condition");
-
-       _filter = (filter_s*)filter;
-
-       media_content_retvm_if(_filter->condition == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid condition");
-       media_content_retvm_if(_filter->condition_collate_type < MEDIA_CONTENT_COLLATE_DEFAULT ||
-               _filter->condition_collate_type > MEDIA_CONTENT_COLLATE_LOCALIZED, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid condition collate");
-
-       /* make the statment */
-       memset(tmp_condition, 0, sizeof(tmp_condition));
-       SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_OPEN_BRACKET, sizeof(tmp_condition));
-       SAFE_STRLCAT(tmp_condition, _filter->condition, sizeof(tmp_condition));
-
-       /* Process for filter v1 */
-       if (_filter->is_full_condition == false && _filter->condition_collate_type != MEDIA_CONTENT_COLLATE_DEFAULT) {
-               SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_COLLATE, sizeof(tmp_condition));
-               SAFE_STRLCAT(tmp_condition, __get_collate_str(_filter->condition_collate_type), sizeof(tmp_condition));
+       switch (collate_type) {
+       case MEDIA_CONTENT_COLLATE_DEFAULT:
+       case MEDIA_CONTENT_COLLATE_NOCASE:
+       case MEDIA_CONTENT_COLLATE_RTRIM:
+       case MEDIA_CONTENT_COLLATE_LOCALIZED:
+               return true;
+       default:
+               return false;
        }
-
-       SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_BRACKET, sizeof(tmp_condition));
-
-       if (STRING_VALID(tmp_condition))
-               *generated_condition = g_strdup(tmp_condition);
-       else
-               *generated_condition = NULL;
-
-       media_content_sec_debug("Condition : %s", *generated_condition);
-
-       return ret;
 }
 
-int _media_filter_attribute_option_generate(filter_h filter, char **generated_option)
+int _media_filter_build_condition(bool is_full, const char *condition, media_content_collation_e collate_type, char **result)
 {
-       int ret = MEDIA_CONTENT_ERROR_NONE;
-       filter_s *_filter = NULL;
-       char query[DEFAULT_QUERY_SIZE] = {0, };
-       char option[DEFAULT_QUERY_SIZE] = {0, };
-
-       media_content_retvm_if(filter == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid filter");
+       media_content_retvm_if(result == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid out param");
+       media_content_retvm_if(!STRING_VALID(condition), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid condition");
+       media_content_retvm_if(!__check_collate_type(collate_type), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid condition collate");
 
-       _filter = (filter_s*)filter;
-
-       memset(query, 0x00, sizeof(query));
-
-       /* Order by*/
-       if (STRING_VALID(_filter->order_keyword)) {
-               if ((_filter->order_type == MEDIA_CONTENT_ORDER_ASC) || (_filter->order_type == MEDIA_CONTENT_ORDER_DESC)) {
-                       SAFE_STRLCAT(query, QUERY_KEYWORD_ORDER_BY, sizeof(query));
-                       SAFE_STRLCAT(query, _filter->order_keyword, sizeof(query));
-
-                       if (_filter->order_collate_type == MEDIA_CONTENT_COLLATE_NOCASE || _filter->order_collate_type == MEDIA_CONTENT_COLLATE_RTRIM || _filter->order_collate_type == MEDIA_CONTENT_COLLATE_LOCALIZED) {
-                               SAFE_STRLCAT(query, QUERY_KEYWORD_COLLATE, sizeof(query));
-                               SAFE_STRLCAT(query, __get_collate_str(_filter->order_collate_type), sizeof(query));
-                       } else {
-                               SAFE_STRLCAT(query, QUERY_KEYWORD_SPACE, sizeof(query));
-                       }
-                       SAFE_STRLCAT(query, __get_order_str(_filter->order_type), sizeof(query));
-               } else {
-                       SAFE_STRLCAT(query, _filter->order_keyword, sizeof(query));
-               }
-       }
-
-       /* offset */
-       SAFE_STRLCAT(query, QUERY_KEYWORD_SPACE, sizeof(query));
-
-       memset(option, 0, sizeof(option));
-       snprintf(option, sizeof(option), "%s %d, %d", QUERY_KEYWORD_LIMIT, _filter->offset, _filter->count);
+       if (is_full)
+               *result = g_strdup_printf("(%s)", condition);
+       else
+               *result = g_strdup_printf("(%s%s)", condition, __get_collate_str(collate_type));
 
-       SAFE_STRLCAT(query, option, sizeof(query));
+       media_content_sec_debug("Condition : %s", *result);
 
-       if (STRING_VALID(query)) {
-               *generated_option = g_strdup(query);
-               media_content_sec_debug("Option : %s", *generated_option);
-       } else {
-               *generated_option = NULL;
-       }
-
-       return ret;
+       return MEDIA_CONTENT_ERROR_NONE;
 }
 
-int _media_filter_attribute_option_generate_with_full_query(filter_h filter, char **generated_option)
+int _media_filter_build_option(filter_h filter, char **result)
 {
-       int ret = MEDIA_CONTENT_ERROR_NONE;
-       filter_s * _filter = NULL;
-       char query[DEFAULT_QUERY_SIZE] = {0, };
-       char option[DEFAULT_QUERY_SIZE] = {0, };
-
-       media_content_retvm_if(filter == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid filter");
-       media_content_retvm_if(generated_option == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid generated_option");
+       filter_s *_filter = (filter_s *)filter;
 
-       _filter = (filter_s*)filter;
+       media_content_retvm_if(!_filter, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid filter");
+       media_content_retvm_if(!result, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid out param");
 
-       memset(query, 0, sizeof(query));
-
-       /* Order by*/
-       if (STRING_VALID(_filter->order_keyword)) {
-               SAFE_STRLCAT(query, QUERY_KEYWORD_ORDER_BY, sizeof(query));
-               SAFE_STRLCAT(query, _filter->order_keyword, sizeof(query));
+       if (!STRING_VALID(_filter->order_keyword)) {
+               *result = g_strdup_printf(" LIMIT %d, %d", _filter->offset, _filter->count);
+               return MEDIA_CONTENT_ERROR_NONE;
        }
 
-       /* offset */
-       SAFE_STRLCAT(query, QUERY_KEYWORD_SPACE, sizeof(query));
-
-       memset(option, 0, sizeof(option));
-       snprintf(option, sizeof(option), "%s %d, %d", QUERY_KEYWORD_LIMIT, _filter->offset, _filter->count);
-       SAFE_STRLCAT(query, option, sizeof(query));
+       if (_filter->is_full_order) {
+               *result = g_strdup_printf("ORDER BY %s LIMIT %d, %d", _filter->order_keyword, _filter->offset, _filter->count);
+               return MEDIA_CONTENT_ERROR_NONE;
+       }
 
-       if (STRING_VALID(query)) {
-               *generated_option = g_strdup(query);
-               media_content_sec_debug("Option : %s", *generated_option);
+       if (_filter->order_type == MEDIA_CONTENT_ORDER_ASC || _filter->order_type == MEDIA_CONTENT_ORDER_DESC) {
+               *result = g_strdup_printf("ORDER BY %s%s%s LIMIT %d, %d",
+                       _filter->order_keyword,
+                       __get_collate_str(_filter->order_collate_type),
+                       __get_order_str(_filter->order_type),
+                       _filter->offset,
+                       _filter->count);
        } else {
-               *generated_option = NULL;
+               *result = g_strdup_printf("%s LIMIT %d, %d", _filter->order_keyword, _filter->offset, _filter->count);
        }
 
-       return ret;
+       return MEDIA_CONTENT_ERROR_NONE;
 }
 
-
 int media_filter_create(filter_h *filter)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;