if (filter != NULL) {
_filter = (filter_s*)filter;
- if (STRING_VALID(_filter->condition)) {
- /*bracket should be added to condition. If application use "OR" condition, F/W restriction condition like "validity=1" is disregared
- ex) select path from media where validity=1 and media_type=3 or media_type=1;*/
- char bracket_added_condition[MAX_QUERY_SIZE] = {0, };
- memset(bracket_added_condition, 0x00, sizeof(bracket_added_condition));
-
- SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_OPEN_BRACKET, sizeof(bracket_added_condition));
- SAFE_STRLCAT(bracket_added_condition, _filter->condition, sizeof(bracket_added_condition));
+ if (_filter->is_full_condition == false) {
+ /* Process for filter v1 */
+ if (STRING_VALID(_filter->condition)) {
+ /*bracket should be added to condition. If application use "OR" condition, F/W restriction condition like "validity=1" is disregared
+ ex) select path from media where validity=1 and media_type=3 or media_type=1;*/
+ char bracket_added_condition[MAX_QUERY_SIZE] = {0, };
+ memset(bracket_added_condition, 0x00, sizeof(bracket_added_condition));
+
+ SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_OPEN_BRACKET, sizeof(bracket_added_condition));
+ SAFE_STRLCAT(bracket_added_condition, _filter->condition, sizeof(bracket_added_condition));
+
+ ret = _media_filter_attribute_generate(attr, bracket_added_condition, _filter->condition_collate_type, condition_query);
+ media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+ }
- ret = _media_filter_attribute_generate(attr, bracket_added_condition, _filter->condition_collate_type, condition_query);
- media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+ } else {
+ /* Process for filter v2 */
+ if (STRING_VALID(_filter->condition)) {
+ ret = _media_filter_attribute_generate_with_full_query(attr, filter, condition_query);
+ media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+ }
}
- ret = _media_filter_attribute_option_generate(attr, filter, option_query);
- if (ret != MEDIA_CONTENT_ERROR_NONE) {
- SAFE_FREE(*condition_query);
- return ret;
+ 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;
+ }
}
if (STRING_VALID(*condition_query)) {
return ret;
}
+int _media_filter_attribute_generate_with_full_query(attribute_h attr, filter_h filter, char **generated_condition)
+{
+ unsigned int idx = 0;
+ GList *token_list = NULL;
+ int size = 0;
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ int total_str_size = 0;
+ token_t *token;
+ filter_s * _filter = NULL;
+
+ media_content_retvm_if(attr == NULL, MEDIA_CONTENT_ERROR_DB_FAILED, "DB field mapping table doesn't exist. Check db connection");
+ 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");
+
+ if (__tokenize(&token_list, _filter->condition) < 0) {
+ media_content_error("INVALID_PARAMETER(0x%08x):Invalid the condition", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+ return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+ }
+
+ for (idx = 0; idx < g_list_length(token_list); idx++) {
+ token = (token_t*)g_list_nth_data(token_list, idx);
+
+ if (token->type == UNKNOWN_TYPE) {
+ char *replace_str = __media_filter_replace_attr(attr, token->str);
+ if (STRING_VALID(replace_str)) {
+ SAFE_FREE(token->str);
+ token->str = replace_str;
+ }
+ }
+
+ total_str_size += strlen(token->str)+1;
+ /* media_content_debug("[%d][type:%d]:%s", idx, token->type, token->str); */
+ }
+
+ /* make the statment */
+ /*COLLATE_STR_SIZE is to give a margin - Add : +2 */
+ size = total_str_size + COLLATE_STR_SIZE + 1;
+ *generated_condition = (char*)calloc(size, sizeof(char));
+
+ SAFE_STRLCAT(*generated_condition, QUERY_KEYWORD_OPEN_BRACKET, size);
+
+ for (idx = 0; idx < g_list_length(token_list); idx++) {
+ token = (token_t*)g_list_nth_data(token_list, idx);
+
+ if ((token != NULL) && STRING_VALID(token->str)) {
+ SAFE_STRLCAT(*generated_condition, token->str, size);
+ SAFE_STRLCAT(*generated_condition, SPACE, size);
+
+ SAFE_FREE(token->str);
+ SAFE_FREE(token);
+ }
+ }
+
+ SAFE_STRLCAT(*generated_condition, QUERY_KEYWORD_BRACKET, size);
+
+ media_content_sec_debug("Condition : %s", *generated_condition);
+
+ if (token_list != NULL) {
+ g_list_free(token_list);
+ token_list = NULL;
+ }
+
+ return ret;
+}
+
int _media_filter_attribute_option_generate(attribute_h attr, filter_h filter, char **generated_option)
{
int ret = MEDIA_CONTENT_ERROR_NONE;
SAFE_STRLCAT(option_query, condition, sizeof(option_query));
if (STRING_VALID(option_query))
- *generated_option = strdup(option_query);
+ *generated_option = g_strdup(option_query);
else
*generated_option = NULL;
return ret;
}
+int _media_filter_attribute_option_generate_with_full_query(attribute_h attr, filter_h filter, char **generated_option)
+{
+ unsigned int idx = 0;
+ GList *token_list = NULL;
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ token_t *token;
+ filter_s * _filter = NULL;
+ char query[DEFAULT_QUERY_SIZE] = {0, };
+ char option[DEFAULT_QUERY_SIZE] = {0, };
+
+ media_content_retvm_if(attr == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid attr");
+ 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 = (filter_s*)filter;
+
+ /* Order by*/
+ if (STRING_VALID(_filter->order_keyword)) {
+ if (__tokenize_attribute(&token_list, _filter->order_keyword) < 0) {
+ media_content_error("INVALID_PARAMETER(0x%08x):Invalid the order", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+ return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+ }
+
+ for (idx = 0; idx < g_list_length(token_list); idx++) {
+ token = (token_t*)g_list_nth_data(token_list, idx);
+
+ if (token->type == UNKNOWN_TYPE) {
+ char *replace_str = __media_filter_replace_attr(attr, token->str);
+ if (STRING_VALID(replace_str)) {
+ SAFE_FREE(token->str);
+ token->str = replace_str;
+ }
+ }
+ }
+
+ memset(query, 0, sizeof(query));
+
+ /* make the statment */
+ SAFE_STRLCAT(query, QUERY_KEYWORD_ORDER_BY, sizeof(query));
+ SAFE_STRLCAT(query, QUERY_KEYWORD_SPACE, sizeof(query));
+
+ for (idx = 0; idx < g_list_length(token_list); idx++) {
+ token = (token_t*)g_list_nth_data(token_list, idx);
+
+ if ((token != NULL) && STRING_VALID(token->str)) {
+ SAFE_STRLCAT(query, token->str, sizeof(query));
+ SAFE_STRLCAT(query, SPACE, sizeof(query));
+
+ SAFE_FREE(token->str);
+ SAFE_FREE(token);
+ }
+ }
+
+ if (token_list != NULL) {
+ g_list_free(token_list);
+ token_list = NULL;
+ }
+ }
+
+ /* 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 (STRING_VALID(query)) {
+ *generated_option = g_strdup(query);
+ media_content_sec_debug("Option : %s", *generated_option);
+ } else {
+ *generated_option = NULL;
+ }
+
+ return ret;
+}
+
+
int media_filter_create(filter_h *filter)
{
int ret = MEDIA_CONTENT_ERROR_NONE;
_filter->order_collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
_filter->offset = -1;
_filter->count = -1;
+ _filter->is_full_condition = false;
+ _filter->is_full_order = false;
*filter = (filter_h)_filter;
if ((_filter != NULL) && STRING_VALID(condition)
&& ((collate_type >= MEDIA_CONTENT_COLLATE_DEFAULT) && (collate_type <= MEDIA_CONTENT_COLLATE_LOCALIZED))) {
+
+ _filter->is_full_condition = false;
+
if (STRING_VALID(_filter->condition))
SAFE_FREE(_filter->condition);
if ((_filter != NULL) && STRING_VALID(order_keyword)
&& ((order_type == MEDIA_CONTENT_ORDER_ASC) || (order_type == MEDIA_CONTENT_ORDER_DESC))
&& ((collate_type >= MEDIA_CONTENT_COLLATE_DEFAULT) && (collate_type <= MEDIA_CONTENT_COLLATE_LOCALIZED))) {
+
+ _filter->is_full_order = false;
+
SAFE_FREE(_filter->order_keyword);
- if (STRING_VALID(order_keyword)) {
- _filter->order_keyword = strdup(order_keyword);
- media_content_retvm_if(_filter->order_keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+ _filter->order_keyword = strdup(order_keyword);
+ media_content_retvm_if(_filter->order_keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
- _filter->order_type = order_type;
- _filter->order_collate_type = collate_type;
- } else {
- media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
- ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
- }
+ _filter->order_type = order_type;
+ _filter->order_collate_type = collate_type;
} else {
media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
filter_s *_filter = (filter_s*)filter;
if (_filter) {
- if (STRING_VALID(_filter->condition)) {
+ if (STRING_VALID(_filter->condition) && _filter->is_full_condition == false) {
char new_condition[MAX_QUERY_SIZE] = {0, };
memset(new_condition, 0, sizeof(new_condition));
ret = _media_content_replace_path_in_condition(_filter->condition, new_condition, FALSE);
filter_s *_filter = (filter_s*)filter;
if (_filter) {
- if (STRING_VALID(_filter->order_keyword)) {
+ if (STRING_VALID(_filter->order_keyword) && _filter->is_full_order == false) {
*order_keyword = strdup(_filter->order_keyword);
media_content_retvm_if(*order_keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
} else {
return ret;
}
+
+int media_filter_set_condition_v2(filter_h filter, const char *condition)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ filter_s *_filter = (filter_s*)filter;
+
+ if ((_filter != NULL) && STRING_VALID(condition)) {
+ _filter->is_full_condition = true;
+
+ if (STRING_VALID(_filter->condition))
+ SAFE_FREE(_filter->condition);
+
+ char new_condition[MAX_QUERY_SIZE] = {0, };
+ memset(new_condition, 0, sizeof(new_condition));
+ ret = _media_content_replace_path_in_condition(condition, new_condition, TRUE);
+ media_content_retvm_if(!STRING_VALID(new_condition), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
+
+ _filter->condition = strdup(new_condition);
+ media_content_retvm_if(_filter->condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+
+ media_content_sec_debug("Condition string : %s", _filter->condition);
+ } else {
+ media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+ ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+ }
+
+ return ret;
+}
+
+int media_filter_get_condition_v2(filter_h filter, char **condition)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ filter_s *_filter = (filter_s*)filter;
+
+ if (_filter) {
+ if (STRING_VALID(_filter->condition) && _filter->is_full_condition == true) {
+ char new_condition[MAX_QUERY_SIZE] = {0, };
+ memset(new_condition, 0, sizeof(new_condition));
+ ret = _media_content_replace_path_in_condition(_filter->condition, new_condition, FALSE);
+ media_content_retvm_if(!STRING_VALID(new_condition), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
+
+ *condition = strdup(new_condition);
+ media_content_retvm_if(*condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+ } else {
+ *condition = NULL;
+ }
+ } else {
+ media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+ ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+ }
+
+ return ret;
+}
+
+int media_filter_set_order_v2(filter_h filter, const char *order)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ filter_s *_filter = (filter_s*)filter;
+
+ if ((_filter != NULL) && STRING_VALID(order)) {
+ _filter->is_full_order = true;
+
+ SAFE_FREE(_filter->order_keyword);
+
+ _filter->order_keyword = strdup(order);
+ media_content_retvm_if(_filter->order_keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+ } else {
+ media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+ ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+ }
+
+ return ret;
+}
+
+int media_filter_get_order_v2(filter_h filter, char **order)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ filter_s *_filter = (filter_s*)filter;
+
+ if (_filter) {
+ if (STRING_VALID(_filter->order_keyword) && _filter->is_full_order == true) {
+ *order = strdup(_filter->order_keyword);
+ media_content_retvm_if(*order == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+ } else {
+ *order = NULL;
+ }
+ } else {
+ media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+ ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+ }
+
+ return ret;
+}
+