From a891f94121be75cec7f17fec352c7ba90a316b9e Mon Sep 17 00:00:00 2001 From: Minje Ahn Date: Wed, 18 Mar 2020 11:58:23 +0900 Subject: [PATCH] Improve filter function Change-Id: I7461af0138ba8eac098e364b137d8f8e7375ef9b Signed-off-by: Minje Ahn --- include/media_info_private.h | 5 +- include_product/media_info_private.h | 5 +- src/media_db.c | 178 ++++++++++++++++------------------- src/media_filter.c | 164 ++++++++++---------------------- 4 files changed, 136 insertions(+), 216 deletions(-) diff --git a/include/media_info_private.h b/include/media_info_private.h index 2fcd384..ec414eb 100755 --- a/include/media_info_private.h +++ b/include/media_info_private.h @@ -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" diff --git a/include_product/media_info_private.h b/include_product/media_info_private.h index f61d93e..621002b 100755 --- a/include_product/media_info_private.h +++ b/include_product/media_info_private.h @@ -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); diff --git a/src/media_db.c b/src/media_db.c index ca96b98..c706636 100755 --- a/src/media_db.c +++ b/src/media_db.c @@ -19,158 +19,158 @@ #include #include -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; } diff --git a/src/media_filter.c b/src/media_filter.c index 985fbbe..93bbef1 100755 --- a/src/media_filter.c +++ b/src/media_filter.c @@ -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; -- 2.7.4