Match columns of playlist with filter keyword
[platform/core/api/media-content.git] / src / media_filter.c
index 7725569..29e023a 100755 (executable)
 
 
 #include <media_info_private.h>
+#include <media_util_private.h>
+#include <vconf.h>
 
-static char *media_token[] =
-{
+static const char *media_token[] = {
        " ",
        "\"",
        "'",
@@ -29,19 +30,15 @@ static char *media_token[] =
        "<",
        ">=",
        ">",
+       "!=",
 };
 
 
-typedef struct _token_t
-{
+typedef struct _token_t {
        int type;
        char *str;
-}token_t;
-
+} token_t;
 
-#define MAX_LEFT_VALUE 512
-#define SPACE_LEN 1
-#define SPACE " "
 #define UNKNOWN_TYPE 1000
 #define STRING_TYPE 100
 
@@ -54,69 +51,62 @@ static int __tokenize(GList **token_list, const char *str);
 
 static bool __is_pinyin_needed(void)
 {
-#if 0
        char *lang = NULL;
-       char *china = "zh_CN";
-       char *hongkong = "zh_HK";
-#endif
+       const char *china = "zh_CN";
+       const char *hongkong = "zh_HK";
        int ret = FALSE;
-#if 0
+
        /*Check CSC first*/
        bool pinyin_support = FALSE;
        media_svc_check_pinyin_support(&pinyin_support);
-       if(pinyin_support)
-       {
+       if (pinyin_support) {
                /*Check Language Setting*/
                lang = vconf_get_str(VCONFKEY_LANGSET);
-               if (lang == NULL)
-               {
-                       media_content_error("Fail to get string of language set");
-                       return ret;
-               }
-               if((strncmp(china, lang, strlen(china)) == 0) ||
-                       (strncmp(hongkong, lang, strlen(hongkong)) == 0))
-               {
+               media_content_retvm_if(lang == NULL, ret, "Fail to get string of language set");
+
+               if ((strncmp(china, lang, strlen(china)) == 0) ||
+                       (strncmp(hongkong, lang, strlen(hongkong)) == 0)) {
                        ret = TRUE;
                }
 
                SAFE_FREE(lang);
        }
-#endif
+
        return ret;
 }
 
 static char *__get_order_str(media_content_order_e order_enum)
 {
-       switch(order_enum) {
-               case MEDIA_CONTENT_ORDER_ASC:
-                       return "ASC";
-               case MEDIA_CONTENT_ORDER_DESC:
-                       return "DESC";
-               default:
-                       return " ";
+       switch (order_enum) {
+       case MEDIA_CONTENT_ORDER_ASC:
+               return (char *)"ASC";
+       case MEDIA_CONTENT_ORDER_DESC:
+               return (char *)"DESC";
+       default:
+               return (char *)" ";
        }
 }
 
 static char *__get_collate_str(media_content_collation_e collate_type)
 {
-       switch(collate_type) {
-               case MEDIA_CONTENT_COLLATE_NOCASE:
-                       return "NOCASE";
-               case MEDIA_CONTENT_COLLATE_RTRIM:
-                       return "RTRIM";
-               case MEDIA_CONTENT_COLLATE_LOCALIZED:
-                       if(__is_pinyin_needed())
-                               return "NOCASE";
-                       else
-                               return "localized";
-               default: return " ";
+       switch (collate_type) {
+       case MEDIA_CONTENT_COLLATE_NOCASE:
+               return (char *)"NOCASE";
+       case MEDIA_CONTENT_COLLATE_RTRIM:
+               return (char *)"RTRIM";
+       case MEDIA_CONTENT_COLLATE_LOCALIZED:
+               if (__is_pinyin_needed())
+                       return (char *)"NOCASE";
+               else
+                       return (char *)"localized";
+       default: return (char *)" ";
        }
 }
 
 static void __filter_attribute_free_value(gpointer key, gpointer value, gpointer user_data)
 {
-       SAFE_FREE(key);
-       SAFE_FREE(value);
+       SAFE_G_FREE(key);
+       SAFE_G_FREE(value);
 }
 
 static char *__media_filter_replace_attr(attribute_h attr, char *name)
@@ -125,19 +115,14 @@ static char *__media_filter_replace_attr(attribute_h attr, char *name)
        char *generated_value = NULL;
        attribute_s *_attr = (attribute_s *)attr;
 
-       if(!g_hash_table_lookup_extended(_attr->attr_map,
-                                                                               name,
-                                                                               (gpointer)&key_temp, (gpointer)&generated_value))
-       {
-               //can't find the value
-               //media_content_error("NOT_FOUND_VALUE(%s)", name);
+       if (!g_hash_table_lookup_extended(_attr->attr_map, name, (gpointer)&key_temp, (gpointer)&generated_value)) {
+               /* can't find the value */
+               /* media_content_error("NOT_FOUND_VALUE(%s)", name); */
                return NULL;
        }
 
-       if(STRING_VALID(generated_value))
-       {
+       if (STRING_VALID(generated_value))
                return strdup(generated_value);
-       }
 
        media_content_error("__media_filter_replace_attr fail");
 
@@ -149,29 +134,18 @@ static int __tokenize_operator(token_t *token, const char *str, int op_type)
        int ret = 0;
        const char *tmp = str;
 
-       if(token != NULL && STRING_VALID(tmp))
-       {
+       if (token != NULL && STRING_VALID(tmp)) {
                token->type = op_type;
                int token_size = strlen(media_token[op_type]);
-               if(token_size == 0)
-               {
-                       media_content_error("Invalid token_size. op_type[%d]", op_type);
-                       return -1;
-               }
+               media_content_retvm_if(token_size == 0, -1, "Invalid token_size. op_type[%d]", op_type);
 
                token->str = (char*)calloc(token_size+1, sizeof(char));
-               if(token->str == NULL)
-               {
-                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                       return -1;
-               }
+               media_content_retvm_if(token->str == NULL, -1, "OUT_OF_MEMORY");
 
                strncpy(token->str, tmp, token_size);
-               //media_content_debug("type : [%d] str : [%s]", token->type, token->str);
+               /*media_content_debug("type : [%d] str : [%s]", token->type, token->str);*/
                ret = token_size;
-       }
-       else
-       {
+       } else {
                ret = -1;
        }
 
@@ -183,20 +157,14 @@ static int __tokenize_string(token_t *token, const char *str, int size)
        int ret = size;
        const char *tmp = str;
 
-       if(token != NULL && STRING_VALID(tmp) && size > 0)
-       {
+       if (token != NULL && STRING_VALID(tmp) && size > 0) {
                token->str = (char*)calloc(size+1, sizeof(char));
-               if(token->str == NULL)
-               {
-                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                       return -1;
-               }
+               media_content_retvm_if(token->str == NULL, -1, "OUT_OF_MEMORY");
+
                token->type = UNKNOWN_TYPE;
                strncpy(token->str, tmp, size);
-               //media_content_debug("type : [%d] str : [%s]", token->type, token->str);
-       }
-       else
-       {
+               /*media_content_debug("type : [%d] str : [%s]", token->type, token->str);*/
+       } else {
                ret = -1;
        }
 
@@ -208,80 +176,58 @@ static int __tokenize_attribute(GList **token_list, const char *str)
        int ret = 0;
        int idx = 0;
 
-       if(!STRING_VALID(str)) {
-               media_content_error("Parameter string in invalid");
-               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-       }
+       media_content_retvm_if(!STRING_VALID(str), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Parameter string is invalid");
 
        const char *tmp = str;
        const char *dst_ptr = str + strlen(str);
 
-       for (idx = 0; (*(tmp+idx)) && (tmp < dst_ptr); idx++)
-       {
-               //media_content_debug("[%d] '%c'", idx, tmp[idx]);
-               if(tmp[idx] == ' ')             //" "
-               {
-                       if(idx == 0)            // ignore the space.
-                       {
+       for (idx = 0; (*(tmp+idx)) && (tmp < dst_ptr); idx++) {
+               /*media_content_debug("[%d] '%c'", idx, tmp[idx]);*/
+               if (tmp[idx] == ' ') {          /* " " */
+                       if (idx == 0) {         /* ignore the space. */
                                tmp++;
                                idx = -1;
                                continue;
                        }
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       if(token == NULL)
-                       {
-                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                               return -1;
-                       }
+                       media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
+
                        token->type = UNKNOWN_TYPE;
                        token->str = (char*)calloc(idx+1, sizeof(char));
-                       if(token->str == NULL)
-                       {
+                       if (token->str == NULL) {
                                SAFE_FREE(token);
                                media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
                                return -1;
                        }
                        strncpy(token->str, tmp, idx);
-                       //media_content_debug("type : [%d] str : [%s]", token->type, token->str);
+                       /*media_content_debug("type : [%d] str : [%s]", token->type, token->str);*/
                        *token_list = g_list_append(*token_list, token);
                        tmp = tmp +idx + strlen(media_token[0]);
                        idx = -1;
-               }
-               else if(tmp[idx] == ',')        // " , "
-               {
-                       if(idx != 0)
-                       {
+               } else if (tmp[idx] == ',') {   /* " , " */
+                       if (idx != 0) {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                       return -1;
-                               }
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
+
                                ret = __tokenize_string(token, tmp, idx);
-                               if (ret < 0)
-                               {
+                               if (ret < 0) {
                                        SAFE_FREE(token);
                                        media_content_error("tokenize error occured");
                                        return -1;
-                               }
-                               else
-                               {
+                               } else {
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + idx;
                                }
                        }
 
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       int size = __tokenize_operator(token, tmp,3);
+                       int size = __tokenize_operator(token, tmp, 3);
 
-                       if(token != NULL && STRING_VALID(token->str))
-                       {
+                       if (token != NULL && STRING_VALID(token->str)) {
                                *token_list = g_list_append(*token_list, token);
                                tmp += size;
                                idx = -1;
-                       }
-                       else
-                       {
+                       } else {
                                SAFE_FREE(token);
                                media_content_error("tokenize error occured");
                                return -1;
@@ -289,29 +235,20 @@ static int __tokenize_attribute(GList **token_list, const char *str)
                }
        }
 
-       if(*tmp)                        //remained string
-       {
+       if (*tmp) {                     /* remained string */
                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-               if(token == NULL)
-               {
-                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                       return -1;
-               }
+               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
 
                ret = __tokenize_string(token, tmp, idx);
-               if (ret < 0)
-               {
+               if (ret < 0) {
                        SAFE_FREE(token);
                        media_content_error("tokenize error occured");
                        return -1;
                }
 
-               if(token != NULL && STRING_VALID(token->str))
-               {
+               if (token != NULL && STRING_VALID(token->str)) {
                        *token_list = g_list_append(*token_list, token);
-               }
-               else
-               {
+               } else {
                        SAFE_FREE(token);
                        media_content_error("tokenize error occured");
                        return -1;
@@ -326,75 +263,56 @@ static int __tokenize(GList **token_list, const char *str)
        int ret = 0;
        int idx = 0;
 
-       if(!STRING_VALID(str)) {
-               media_content_error("Parameter string in invalid");
-               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-       }
+       media_content_retvm_if(!STRING_VALID(str), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Parameter string is invalid");
 
        const char *tmp = str;
        const char *dst_ptr = str + strlen(str);
 
-       for (idx = 0; (*(tmp+idx)) && (tmp < dst_ptr); idx++)
-       {
-               //media_content_debug("[%d] '%c'", idx, tmp[idx]);
-               if(tmp[idx] == media_token[0][0])               //" "
-               {
-                       if(idx == 0)            // ignore the space.
-                       {
+       for (idx = 0; (*(tmp+idx)) && (tmp < dst_ptr); idx++) {
+               /* media_content_debug("[%d] '%c'", idx, tmp[idx]); */
+               if (tmp[idx] == media_token[0][0]) {            /* " " */
+                       if (idx == 0) {         /* ignore the space. */
                                tmp++;
                                idx = -1;
                                continue;
                        }
 
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       if(token == NULL)
-                       {
-                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                               return -1;
-                       }
+                       media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
+
                        token->type = UNKNOWN_TYPE;
-                       token->str = (char*)calloc(idx+1, sizeof(char));
-                       if(token->str == NULL)
-                       {
+                       token->str = (char *)calloc(idx+1, sizeof(char));
+                       if (token->str == NULL) {
                                SAFE_FREE(token);
                                media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
                                return -1;
                        }
                        strncpy(token->str, tmp, idx);
-                       //media_content_debug("type : [%d] str : [%s]", token->type, token->str);
+                       /* media_content_debug("type : [%d] str : [%s]", token->type, token->str); */
                        *token_list = g_list_append(*token_list, token);
                        tmp = tmp +idx + strlen(media_token[0]);
                        idx = -1;
-               }
-               else if(tmp[idx] == media_token[1][0])  // " \" "
-               {
+               } else if (tmp[idx] == media_token[1][0]) {     /* " \" " */
                        int j;
                        bool flag = false;
-                       for(j = idx+1; tmp[j]; j++)     //find next quotation
-                       {
-                               if(tmp[j] == media_token[1][0] && tmp[j+1] == media_token[1][0])
-                               {
+                       for (j = idx+1; tmp[j]; j++) {  /* find next quotation */
+                               if (tmp[j] == media_token[1][0] && tmp[j+1] == media_token[1][0]) {
                                        j += 1;
                                        continue;
                                }
-                               if(tmp[j] == media_token[1][0])
-                               {
+                               if (tmp[j] == media_token[1][0]) {
                                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                                       if(token == NULL)
-                                       {
-                                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                               return -1;
-                                       }
+                                       media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
+
                                        token->str = (char*) calloc(j+1+1, sizeof(char));
-                                       if(token->str == NULL)
-                                       {
+                                       if (token->str == NULL) {
                                                SAFE_FREE(token);
                                                media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
                                                return -1;
                                        }
                                        token->type = STRING_TYPE;
                                        strncpy(token->str, tmp, j+1);
-                                       //media_content_debug("type : [%d] str : [%s], j : %d", token->type, token->str, j);
+                                       /* media_content_debug("type : [%d] str : [%s], j : %d", token->type, token->str, j); */
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + strlen(token->str);
                                        idx = -1;
@@ -403,58 +321,44 @@ static int __tokenize(GList **token_list, const char *str)
                                }
                        }
 
-                       if(!flag && *tmp != '\0' && tmp[j]=='\0')
-                       {
+                       if (!flag && *tmp != '\0' && tmp[j] == '\0') {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                       return -1;
-                               }
-                               token->str = (char*) calloc(j+1,sizeof(char));
-                               if(token->str == NULL)
-                               {
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
+
+                               token->str = (char *) calloc(j+1, sizeof(char));
+                               if (token->str == NULL) {
                                        SAFE_FREE(token);
                                        media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
                                        return -1;
                                }
                                token->type = UNKNOWN_TYPE;
-                               strncpy(token->str, tmp,j);
-                               //media_content_debug("type : [%d] str : [%s]", token->type, token->str);
+                               strncpy(token->str, tmp, j);
+                               /* media_content_debug("type : [%d] str : [%s]", token->type, token->str);*/
                                *token_list = g_list_append(*token_list, token);
                                tmp = tmp +strlen(token->str);
                                idx = -1;
                        }
-               }
-               else if(tmp[idx] == media_token[2][0])  // " \' "
-               {
+               } else if (tmp[idx] == media_token[2][0]) {     /* " \' "*/
                        int j;
                        bool flag = false;
-                       for(j = idx+1; tmp[j]; j++)
-                       {
-                               if(tmp[j] == media_token[2][0] && tmp[j+1] == media_token[2][0])
-                               {
+                       for (j = idx+1; tmp[j]; j++) {
+                               if (tmp[j] == media_token[2][0] && tmp[j+1] == media_token[2][0]) {
                                        j += 1;
                                        continue;
                                }
-                               if(tmp[j] == media_token[2][0])
-                               {
+                               if (tmp[j] == media_token[2][0]) {
                                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                                       if(token == NULL)
-                                       {
-                                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                               return -1;
-                                       }
-                                       token->str = (char*) calloc(j+1+1, sizeof(char));
-                                       if(token->str == NULL)
-                                       {
+                                       media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
+
+                                       token->str = (char *) calloc(j+1+1, sizeof(char));
+                                       if (token->str == NULL) {
                                                SAFE_FREE(token);
                                                media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
                                                return -1;
                                        }
                                        token->type = STRING_TYPE;
                                        strncpy(token->str, tmp, j+1);
-                                       //media_content_debug("type : [%d] str : [%s]", token->type, token->str);
+                                       /* media_content_debug("type : [%d] str : [%s]", token->type, token->str); */
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + strlen(token->str);
                                        idx = -1;
@@ -463,340 +367,262 @@ static int __tokenize(GList **token_list, const char *str)
                                }
                        }
 
-                       if(!flag && *tmp != '\0' && tmp[j]=='\0')
-                       {
+                       if (!flag && *tmp != '\0' && tmp[j] == '\0') {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                       return -1;
-                               }
-                               token->str = (char*) calloc(j+1,sizeof(char));
-                               if(token->str == NULL)
-                               {
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
+
+                               token->str = (char*) calloc(j+1, sizeof(char));
+                               if (token->str == NULL) {
                                        SAFE_FREE(token);
                                        media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
                                        return -1;
                                }
                                token->type = UNKNOWN_TYPE;
-                               strncpy(token->str, tmp,j);
-                               //media_content_debug("type : [%d] str : [%s]", token->type, token->str);
+                               strncpy(token->str, tmp, j);
+                               /* media_content_debug("type : [%d] str : [%s]", token->type, token->str); */
                                *token_list = g_list_append(*token_list, token);
                                tmp = tmp + strlen(token->str);
                                idx = -1;
                        }
-               }
-               else if(tmp[idx] == media_token[3][0])  //"("
-               {
-                       if(idx != 0)
-                       {
+               } else if (tmp[idx] == media_token[3][0]) {     /* "(" */
+                       if (idx != 0) {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                       return -1;
-                               }
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
+
                                ret = __tokenize_string(token, tmp, idx);
-                               if (ret < 0)
-                               {
+                               if (ret < 0) {
                                        SAFE_FREE(token);
                                        media_content_error("tokenize error occured");
                                        return -1;
-                               }
-                               else
-                               {
+                               } else {
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + idx;
                                }
                        }
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       int size = __tokenize_operator(token, tmp,3);
+                       int size = __tokenize_operator(token, tmp, 3);
 
-                       if(token != NULL && STRING_VALID(token->str))
-                       {
+                       if (token != NULL && STRING_VALID(token->str)) {
                                *token_list = g_list_append(*token_list, token);
                                tmp += size;
                                idx = -1;
-                       }
-                       else
-                       {
+                       } else {
                                SAFE_FREE(token);
                                media_content_error("tokenize error occured");
                                return -1;
                        }
 
-               }
-               else if(tmp[idx] == media_token[4][0])  //")"
-               {
-                       if(idx != 0)
-                       {
+               } else if (tmp[idx] == media_token[4][0]) {     /* ")" */
+                       if (idx != 0) {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                       return -1;
-                               }
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
 
                                ret = __tokenize_string(token, tmp, idx);
-                               if (ret < 0)
-                               {
+                               if (ret < 0) {
                                        SAFE_FREE(token);
                                        media_content_error("tokenize error occured");
                                        return -1;
-                               }
-                               else
-                               {
+                               } else {
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + idx;
                                }
                        }
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       int size = __tokenize_operator(token, tmp,4);
+                       int size = __tokenize_operator(token, tmp, 4);
 
-                       if(token != NULL && STRING_VALID(token->str))
-                       {
+                       if (token != NULL && STRING_VALID(token->str)) {
                                *token_list = g_list_append(*token_list, token);
                                tmp += size;
                                idx = -1;
-                       }
-                       else
-                       {
+                       } else {
                                SAFE_FREE(token);
                                media_content_error("tokenize error occured");
                                return -1;
                        }
 
-               }
-               else if(tmp[idx] == media_token[5][0])  //"="
-               {
-                       if(idx != 0)
-                       {
+               } else if (tmp[idx] == media_token[5][0]) {     /* "=" */
+                       if (idx != 0) {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                       return -1;
-                               }
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
 
                                ret = __tokenize_string(token, tmp, idx);
-                               if (ret < 0)
-                               {
+                               if (ret < 0) {
                                        SAFE_FREE(token);
                                        media_content_error("tokenize error occured");
                                        return -1;
-                               }
-                               else
-                               {
+                               } else {
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + idx;
                                }
                        }
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       int size = __tokenize_operator(token, tmp,5);
+                       int size = __tokenize_operator(token, tmp, 5);
 
-                       if(token != NULL && STRING_VALID(token->str))
-                       {
+                       if (token != NULL && STRING_VALID(token->str)) {
                                *token_list = g_list_append(*token_list, token);
                                tmp += size;
                                idx = -1;
-                       }
-                       else
-                       {
+                       } else {
                                SAFE_FREE(token);
                                media_content_error("tokenize error occured");
                                return -1;
                        }
 
-               }
-               else if(tmp[idx] == media_token[6][0] && tmp[idx+1] == media_token[6][1])       //"<=",
-               {
-                       if(idx != 0)
-                       {
+               } else if (tmp[idx] == media_token[6][0] && tmp[idx+1] == media_token[6][1]) {  /* "<=", */
+                       if (idx != 0) {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                       return -1;
-                               }
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
 
                                ret = __tokenize_string(token, tmp, idx);
-                               if (ret < 0)
-                               {
+                               if (ret < 0) {
                                        SAFE_FREE(token);
                                        media_content_error("tokenize error occured");
                                        return -1;
-                               }
-                               else
-                               {
+                               } else {
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + idx;
                                }
                        }
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       int size = __tokenize_operator(token, tmp,6);
+                       int size = __tokenize_operator(token, tmp, 6);
 
-                       if(token != NULL && STRING_VALID(token->str))
-                       {
+                       if (token != NULL && STRING_VALID(token->str)) {
                                *token_list = g_list_append(*token_list, token);
                                tmp += size;
                                idx = -1;
-                       }
-                       else
-                       {
+                       } else {
                                SAFE_FREE(token);
                                media_content_error("tokenize error occured");
                                return -1;
                        }
 
-               }
-               else if(tmp[idx] == media_token[7][0])  //"<",
-               {
-                       if(idx != 0)
-                       {
+               } else if (tmp[idx] == media_token[7][0]) {     /* "<", */
+                       if (idx != 0) {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                       return -1;
-                               }
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
 
                                ret = __tokenize_string(token, tmp, idx);
-                               if (ret < 0)
-                               {
+                               if (ret < 0) {
                                        SAFE_FREE(token);
                                        media_content_error("tokenize error occured");
                                        return -1;
-                               }
-                               else
-                               {
+                               } else {
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + idx;
                                }
                        }
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       int size = __tokenize_operator(token, tmp,7);
+                       int size = __tokenize_operator(token, tmp, 7);
 
-                       if(token != NULL && STRING_VALID(token->str))
-                       {
+                       if (token != NULL && STRING_VALID(token->str)) {
                                *token_list = g_list_append(*token_list, token);
                                tmp += size;
                                idx = -1;
-                       }
-                       else
-                       {
+                       } else {
                                SAFE_FREE(token);
                                media_content_error("tokenize error occured");
                                return -1;
                        }
 
-               }
-               else if(tmp[idx] == media_token[8][0] && tmp[idx+1] == media_token[8][1])       //">=",
-               {
-                       if(idx != 0)
-                       {
+               } else if (tmp[idx] == media_token[8][0] && tmp[idx+1] == media_token[8][1]) {  /* ">=", */
+                       if (idx != 0) {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                       return -1;
-                               }
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
 
                                ret = __tokenize_string(token, tmp, idx);
-                               if (ret < 0)
-                               {
+                               if (ret < 0) {
                                        SAFE_FREE(token);
                                        media_content_error("tokenize error occured");
                                        return -1;
-                               }
-                               else
-                               {
+                               } else {
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + idx;
                                }
                        }
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       int size = __tokenize_operator(token, tmp,8);
+                       int size = __tokenize_operator(token, tmp, 8);
 
-                       if(token != NULL && STRING_VALID(token->str))
-                       {
+                       if (token != NULL && STRING_VALID(token->str)) {
                                *token_list = g_list_append(*token_list, token);
                                tmp += size;
                                idx = -1;
-                       }
-                       else
-                       {
+                       } else {
                                SAFE_FREE(token);
                                media_content_error("tokenize error occured");
                                return -1;
                        }
 
-               }
-               else if(tmp[idx] == media_token[9][0])  //">",
-               {
-                       if(idx != 0)
-                       {
+               } else if (tmp[idx] == media_token[9][0]) {     /* ">", */
+                       if (idx != 0) {
                                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                               if(token == NULL)
-                               {
-                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
+
+                               ret = __tokenize_string(token, tmp, idx);
+                               if (ret < 0) {
+                                       SAFE_FREE(token);
+                                       media_content_error("tokenize error occured");
                                        return -1;
+                               } else {
+                                       *token_list = g_list_append(*token_list, token);
+                                       tmp = tmp + idx;
                                }
+                       }
+                       token_t *token = (token_t*)calloc(1, sizeof(token_t));
+                       int size = __tokenize_operator(token, tmp, 9);
+
+                       if (token != NULL && STRING_VALID(token->str)) {
+                               *token_list = g_list_append(*token_list, token);
+                               tmp += size;
+                               idx = -1;
+                       } else {
+                               SAFE_FREE(token);
+                               media_content_error("tokenize error occured");
+                               return -1;
+                       }
+               } else if (tmp[idx] == media_token[10][0] && tmp[idx+1] == media_token[10][1]) {        /* "!=", */
+                       if (idx != 0) {
+                               token_t *token = (token_t*)calloc(1, sizeof(token_t));
+                               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
 
                                ret = __tokenize_string(token, tmp, idx);
-                               if (ret < 0)
-                               {
+                               if (ret < 0) {
                                        SAFE_FREE(token);
                                        media_content_error("tokenize error occured");
                                        return -1;
-                               }
-                               else
-                               {
+                               } else {
                                        *token_list = g_list_append(*token_list, token);
                                        tmp = tmp + idx;
                                }
                        }
                        token_t *token = (token_t*)calloc(1, sizeof(token_t));
-                       int size = __tokenize_operator(token, tmp,9);
+                       int size = __tokenize_operator(token, tmp, 10);
 
-                       if(token != NULL && STRING_VALID(token->str))
-                       {
+                       if (token != NULL && STRING_VALID(token->str)) {
                                *token_list = g_list_append(*token_list, token);
                                tmp += size;
                                idx = -1;
-                       }
-                       else
-                       {
+                       } else {
                                SAFE_FREE(token);
                                media_content_error("tokenize error occured");
                                return -1;
                        }
-
                }
        }
 
-       if(*tmp)                        //remained string
-       {
+       if (*tmp) {                     /* remained string */
                token_t *token = (token_t*)calloc(1, sizeof(token_t));
-               if(token == NULL)
-               {
-                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                       return -1;
-               }
+               media_content_retvm_if(token == NULL, -1, "OUT_OF_MEMORY");
 
                ret = __tokenize_string(token, tmp, idx);
-               if (ret < 0)
-               {
+               if (ret < 0) {
                        SAFE_FREE(token);
                        media_content_error("tokenize error occured");
                        return -1;
                }
 
-               if(token != NULL && STRING_VALID(token->str))
-               {
+               if (token != NULL && STRING_VALID(token->str)) {
                        *token_list = g_list_append(*token_list, token);
-               }
-               else
-               {
+               } else {
                        SAFE_FREE(token);
                        media_content_error("tokenize error occured");
                        return -1;
@@ -810,64 +636,39 @@ int _media_filter_attribute_create(attribute_h *attr)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
 
-       if(attr == NULL)
-       {
-               media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-       }
+       media_content_retvm_if(attr == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid attr");
 
        attribute_s *_attr = (attribute_s*)calloc(1, sizeof(attribute_s));
+       media_content_retvm_if(_attr == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
 
-       if(_attr == NULL)
-       {
-               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-               ret = MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-       }
-       else
-       {
-               _attr->attr_map = g_hash_table_new (g_str_hash, g_str_equal);
-               *attr = (attribute_h)_attr;
-       }
+       _attr->attr_map = g_hash_table_new(g_str_hash, g_str_equal);
+       *attr = (attribute_h)_attr;
 
        return ret;
 }
 
-int _media_filter_attribute_add(attribute_h attr, char *user_attr, char *platform_attr)
+int _media_filter_attribute_add(attribute_h attr, const char *user_attr, const char *platform_attr)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        char *_user = NULL;
        char *_platform = NULL;
        attribute_s *_attr = (attribute_s*)attr;
 
-       if(_attr != NULL)
-       {
-               if(STRING_VALID(user_attr) && STRING_VALID(platform_attr))
-               {
-                       _user = strdup(user_attr);
-                       if(_user == NULL)
-                       {
-                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                               return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-                       }
+       media_content_retvm_if(_attr == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid attr");
 
-                       _platform = strdup(platform_attr);
-                       if(_platform == NULL)
-                       {
-                               SAFE_FREE(_user);
-                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                               return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-                       }
+       if (STRING_VALID(user_attr) && STRING_VALID(platform_attr)) {
+               _user = g_strdup(user_attr);
+               media_content_retvm_if(_user == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
 
-                       g_hash_table_insert (_attr->attr_map, _user, _platform);
-               }
-               else
-               {
-                       media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-                       return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+               _platform = g_strdup(platform_attr);
+               if (_platform == NULL) {
+                       SAFE_G_FREE(_user);
+                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
+                       return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
                }
-       }
-       else
-       {
+
+               g_hash_table_insert(_attr->attr_map, _user, _platform);
+       } else {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
@@ -880,103 +681,91 @@ int _media_filter_attribute_destory(attribute_h attr)
        int ret = MEDIA_CONTENT_ERROR_NONE;
        attribute_s *_attr = (attribute_s*)attr;
 
-       if(_attr != NULL)
-       {
-               if(_attr->attr_map != NULL)
-               {
-                       g_hash_table_foreach(_attr->attr_map, __filter_attribute_free_value, NULL);
-                       g_hash_table_destroy(_attr->attr_map);
-               }
+       media_content_retvm_if(_attr == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid attr");
 
-               SAFE_FREE(_attr);
-       }
-       else
-       {
-               media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+       if (_attr->attr_map != NULL) {
+               g_hash_table_foreach(_attr->attr_map, __filter_attribute_free_value, NULL);
+               g_hash_table_destroy(_attr->attr_map);
        }
 
+       SAFE_FREE(_attr);
+
        return ret;
 }
 
-int _media_filter_attribute_generate(attribute_h attr, char *condition, media_content_collation_e collate_type, char **generated_condition)
+int _media_filter_attribute_generate(attribute_h attr, filter_h filter, char **generated_condition)
 {
-       int idx = 0;
+       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;
+       char tmp_condition[MAX_QUERY_SIZE] = {0, };
+
+       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");
+       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");
 
-       if((condition == NULL) || (generated_condition == NULL))
-       {
+       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;
        }
 
-       if(attr != NULL)
-       {
-               if(__tokenize(&token_list, 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);
 
-               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;
-                               }
+               if ((token != NULL) && (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;
+                       } else {
+                               SAFE_FREE(replace_str);
                        }
-
-                       total_str_size += strlen(token->str)+1;
-                       //media_content_debug("[%d][type:%d]:%s", idx, token->type, token->str);
                }
+       }
 
-               //make the statment
-               size = total_str_size + COLLATE_STR_SIZE + 1;
-               * generated_condition = (char*)calloc(size, sizeof(char));
-
-               for(idx = 0; idx < g_list_length(token_list); idx++)
-               {
-                       token = (token_t*)g_list_nth_data(token_list, idx);
+       /* make the statment */
+       memset(tmp_condition, 0, sizeof(tmp_condition));
+       SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_OPEN_BRACKET, sizeof(tmp_condition));
 
-                       if((token != NULL) && STRING_VALID(token->str))
-                       {
-                               SAFE_STRLCAT(*generated_condition, token->str, size);
-                               SAFE_STRLCAT(*generated_condition, SPACE, size);
+       for (idx = 0; idx < g_list_length(token_list); idx++) {
+               token = (token_t*)g_list_nth_data(token_list, idx);
 
-                               SAFE_FREE(token->str);
-                               SAFE_FREE(token);
-                       }
-               }
+               if ((token != NULL) && STRING_VALID(token->str)) {
+                       SAFE_STRLCAT(tmp_condition, token->str, sizeof(tmp_condition));
+                       SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_SPACE, sizeof(tmp_condition));
 
-               if(collate_type == MEDIA_CONTENT_COLLATE_NOCASE || collate_type == MEDIA_CONTENT_COLLATE_RTRIM ||collate_type == MEDIA_CONTENT_COLLATE_LOCALIZED) {
-                       SAFE_STRLCAT(*generated_condition, "COLLATE ", size);
-                       SAFE_STRLCAT(*generated_condition, __get_collate_str(collate_type), size);
-                       SAFE_STRLCAT(*generated_condition, SPACE, size);
+                       SAFE_FREE(token->str);
+                       SAFE_FREE(token);
                }
+       }
 
-               //media_content_debug("statement : %s(%d) (total:%d)", *generated_condition, strlen(*generated_condition), total_str_size);
-               media_content_sec_debug("Condition : %s", *generated_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));
+               SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_SPACE, sizeof(tmp_condition));
+       }
 
-               //if(*generated_condition != NULL)
-               //      res = 1;
+       SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_BRACKET, sizeof(tmp_condition));
 
-               if(token_list != NULL)
-                       g_list_free(token_list);
-       }
+       if (STRING_VALID(tmp_condition))
+               *generated_condition = g_strdup(tmp_condition);
        else
-       {
-               media_content_error("DB field mapping table doesn't exist. Check db connection", MEDIA_CONTENT_ERROR_DB_FAILED);
-               return MEDIA_CONTENT_ERROR_DB_FAILED;
+               *generated_condition = NULL;
+
+       media_content_sec_debug("Condition : %s", *generated_condition);
+
+       if (token_list != NULL) {
+               g_list_free(token_list);
+               token_list = NULL;
        }
 
        return ret;
@@ -986,155 +775,198 @@ int _media_filter_attribute_option_generate(attribute_h attr, filter_h filter, c
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        filter_s *_filter = NULL;
-       char option_query[DEFAULT_QUERY_SIZE] = {0, };
-       char condition[DEFAULT_QUERY_SIZE] = {0, };
-       int size = 0;
-       //bool order_by = true;
+       char query[DEFAULT_QUERY_SIZE] = {0, };
+       char option[DEFAULT_QUERY_SIZE] = {0, };
 
-       if(filter == NULL)
-       {
-               media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+       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");
+
+       _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)) {
+                       unsigned int idx = 0;
+                       GList *token_list = NULL;
+                       token_t *token;
+                       char *attr_str;
+
+                       if (__tokenize_attribute(&token_list, _filter->order_keyword) < 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 != NULL) && (token->type == UNKNOWN_TYPE)) {
+                                       char *replace_str = __media_filter_replace_attr(attr, token->str);
+                                       if (STRING_VALID(replace_str)) {
+                                               attr_str = (char*)calloc(strlen(replace_str) + COLLATE_STR_SIZE + 1, sizeof(char));
+                                               if (attr_str == NULL) {
+                                                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
+                                                       SAFE_FREE(replace_str);
+                                                       continue;
+                                               }
+
+                                               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)
+                                                       snprintf(attr_str, strlen(replace_str) + COLLATE_STR_SIZE + 1, "%s COLLATE %s %s", replace_str, __get_collate_str(_filter->order_collate_type), __get_order_str(_filter->order_type));
+                                               else
+                                                       snprintf(attr_str, strlen(replace_str) + COLLATE_STR_SIZE + 1, "%s %s", replace_str, __get_order_str(_filter->order_type));
+
+                                               SAFE_FREE(token->str);
+                                               token->str = attr_str;
+                                               SAFE_FREE(replace_str);
+                                       } else {
+                                               media_content_error("There is no matched db field for %s", token->str);
+                                               SAFE_FREE(replace_str);
+                                       }
+                               }
+                       }
+
+                       /* make the statment */
+                       SAFE_STRLCAT(query, QUERY_KEYWORD_ORDER_BY, 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, QUERY_KEYWORD_SPACE, sizeof(query));
+
+                                       SAFE_FREE(token->str);
+                                       SAFE_FREE(token);
+                               }
+                       }
+
+                       if (token_list != NULL) {
+                               g_list_free(token_list);
+                               token_list = NULL;
+                       }
+               } else {
+                       SAFE_STRLCAT(query, _filter->order_keyword, sizeof(query));
+               }
        }
 
-       if(attr == NULL)
-       {
-               media_content_error("DB field mapping table doesn't exist. Check db connection", MEDIA_CONTENT_ERROR_DB_FAILED);
-               return MEDIA_CONTENT_ERROR_DB_FAILED;
+       /* 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_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 = NULL;
+       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;
 
-       memset(option_query, 0x00, sizeof(option_query));
+       memset(query, 0, sizeof(query));
 
        /* Order by*/
-       if(STRING_VALID(_filter->order_keyword) && ((_filter->order_type == MEDIA_CONTENT_ORDER_ASC) ||(_filter->order_type == MEDIA_CONTENT_ORDER_DESC)))
-       {
-               int idx = 0;
-               int total_str_size = 0;
-               GList *token_list = NULL;
-               token_t *token;
-               char *attr_str;
-
-               if(__tokenize_attribute(&token_list, _filter->order_keyword) < 0)
-               {
-                       media_content_error("INVALID_PARAMETER(0x%08x):Invalid the condition", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+       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++)
-               {
+               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)
-                       {
+                       if ((token != NULL) && (token->type == UNKNOWN_TYPE)) {
                                char *replace_str = __media_filter_replace_attr(attr, token->str);
-                               if(STRING_VALID(replace_str))
-                               {
-                                       attr_str = (char*)calloc(strlen(replace_str) + COLLATE_STR_SIZE + 1, sizeof(char));
-                                       if(attr_str == NULL)
-                                       {
-                                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                                               SAFE_FREE(replace_str);
-                                               continue;
-                                       }
-
-                                       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) {
-                                               snprintf(attr_str, strlen(replace_str) + COLLATE_STR_SIZE + 1, "%s COLLATE %s %s", replace_str, __get_collate_str(_filter->order_collate_type), __get_order_str(_filter->order_type));
-                                       } else {
-                                               snprintf(attr_str, strlen(replace_str) + COLLATE_STR_SIZE + 1, "%s %s", replace_str, __get_order_str(_filter->order_type));
-                                       }
-
+                               if (STRING_VALID(replace_str)) {
                                        SAFE_FREE(token->str);
-                                       token->str = attr_str;
+                                       token->str = replace_str;
+                               } else {
                                        SAFE_FREE(replace_str);
                                }
-                               else
-                               {
-                                       media_content_error("There is no matched db field for %s", token->str);
-                               }
                        }
-
-                       total_str_size += strlen(token->str) + 1;
-                       //media_content_debug("[%d][type:%d]:%s", idx, token->type, token->str);
                }
 
-               //make the statment
-               char *generated_condition = NULL;
-               size = total_str_size + COLLATE_STR_SIZE + 1;
-               generated_condition = (char*)calloc(size, sizeof(char));
+               /* make the statment */
+               SAFE_STRLCAT(query, QUERY_KEYWORD_ORDER_BY, sizeof(query));
 
-               for(idx = 0; idx < g_list_length(token_list); idx++)
-               {
+               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))
-                       {
-                               //media_content_debug("[%d] %s", idx, token->str);
-                               SAFE_STRLCAT(generated_condition, token->str, size);
-                               SAFE_STRLCAT(generated_condition, SPACE, size);
+                       if ((token != NULL) && STRING_VALID(token->str)) {
+                               SAFE_STRLCAT(query, token->str, sizeof(query));
+                               SAFE_STRLCAT(query, QUERY_KEYWORD_SPACE, sizeof(query));
 
                                SAFE_FREE(token->str);
                                SAFE_FREE(token);
                        }
                }
 
-               snprintf(condition, sizeof(condition), "ORDER BY %s", generated_condition);
-               SAFE_STRLCAT(option_query, condition, sizeof(option_query));
-
-               if(token_list != NULL)
+               if (token_list != NULL) {
                        g_list_free(token_list);
-
-               SAFE_FREE(generated_condition);
+                       token_list = NULL;
+               }
        }
 
        /* offset */
-       SAFE_STRLCAT(option_query, SPACE, sizeof(option_query));
-       snprintf(condition, sizeof(condition), "LIMIT %d, %d", _filter->offset, _filter->count);
-       SAFE_STRLCAT(option_query, condition, sizeof(option_query));
+       SAFE_STRLCAT(query, QUERY_KEYWORD_SPACE, sizeof(query));
 
-       if(STRING_VALID(option_query))
-       {
-               *generated_option = strdup(option_query);
-       }
-       else
-       {
+       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;
 
-       if(filter == NULL)
-       {
-               media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
-               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
-       }
+       media_content_retvm_if(filter == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid filter");
 
        filter_s *_filter = (filter_s*)calloc(1, sizeof(filter_s));
+       media_content_retvm_if(_filter == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
 
-       if(_filter == NULL)
-       {
-               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-               ret = MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-       }
-       else
-       {
-               _filter->storage_id = NULL;
-               _filter->condition = NULL;
-               _filter->order_keyword = NULL;
-               _filter->order_type = -1;
-               _filter->condition_collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
-               _filter->order_collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
-               _filter->offset = -1;
-               _filter->count = -1;
-
-               *filter = (filter_h)_filter;
-       }
+       _filter->storage_id = NULL;
+       _filter->condition = NULL;
+       _filter->order_keyword = NULL;
+       _filter->order_type = -1;
+       _filter->condition_collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
+       _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;
 
        return ret;
 }
@@ -1144,17 +976,14 @@ int media_filter_destroy(filter_h filter)
        int ret = MEDIA_CONTENT_ERROR_NONE;
        filter_s *_filter = (filter_s*)filter;
 
-       if(_filter)
-       {
+       if (_filter) {
                SAFE_FREE(_filter->storage_id);
                SAFE_FREE(_filter->condition);
                SAFE_FREE(_filter->order_keyword);
                SAFE_FREE(_filter);
 
                ret = MEDIA_CONTENT_ERROR_NONE;
-       }
-       else
-       {
+       } else {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
@@ -1167,13 +996,10 @@ int media_filter_set_offset(filter_h filter, int offset, int count)
        int ret = MEDIA_CONTENT_ERROR_NONE;
        filter_s *_filter = (filter_s*)filter;
 
-       if(_filter != NULL)
-       {
+       if (_filter != NULL) {
                _filter->offset = offset;
                _filter->count = count;
-       }
-       else
-       {
+       } else {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
@@ -1186,27 +1012,26 @@ int media_filter_set_condition(filter_h filter, const char *condition, media_con
        int ret = MEDIA_CONTENT_ERROR_NONE;
        filter_s *_filter = (filter_s*)filter;
 
-       if((_filter != NULL) && STRING_VALID(condition)
-               && ((collate_type >= MEDIA_CONTENT_COLLATE_DEFAULT) && (collate_type <= MEDIA_CONTENT_COLLATE_LOCALIZED)))
-       {
-               if(STRING_VALID(_filter->condition))
-               {
+       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);
-               }
 
-               _filter->condition = strdup(condition);
-               if(_filter->condition == NULL)
-               {
-                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                       return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-               }
+               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);
 
                _filter->condition_collate_type = collate_type;
-       }
-       else
-       {
+       } else {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
@@ -1219,32 +1044,20 @@ int media_filter_set_order(filter_h filter, media_content_order_e order_type, co
        int ret = MEDIA_CONTENT_ERROR_NONE;
        filter_s *_filter = (filter_s*)filter;
 
-       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)))
-       {
+       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);
+               _filter->order_keyword = strdup(order_keyword);
+               media_content_retvm_if(_filter->order_keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
 
-                       if(_filter->order_keyword == NULL)
-                       {
-                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                               return MEDIA_CONTENT_ERROR_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;
-               }
-       }
-       else
-       {
+               _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;
        }
@@ -1255,26 +1068,18 @@ int media_filter_set_order(filter_h filter, media_content_order_e order_type, co
 int media_filter_set_storage(filter_h filter, const char *storage_id)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
+       media_content_warn("DEPRECATION WARNING: media_filter_set_storage() is deprecated and will be removed from next release. Use media_filter_set_condition() with MEDIA_PATH keyword instead.");
        filter_s *_filter = (filter_s*)filter;
 
-       if((_filter != NULL) && STRING_VALID(storage_id))
-       {
-               if(STRING_VALID(_filter->storage_id))
-               {
+       if ((_filter != NULL) && STRING_VALID(storage_id)) {
+               if (STRING_VALID(_filter->storage_id))
                        SAFE_FREE(_filter->storage_id);
-               }
 
                _filter->storage_id = strdup(storage_id);
-               if(_filter->storage_id == NULL)
-               {
-                       media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                       return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-               }
+               media_content_retvm_if(_filter->storage_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
 
                media_content_sec_debug("storage_id : %s", _filter->storage_id);
-       }
-       else
-       {
+       } else {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
@@ -1287,13 +1092,10 @@ int media_filter_get_offset(filter_h filter, int *offset, int *count)
        int ret = MEDIA_CONTENT_ERROR_NONE;
        filter_s *_filter = (filter_s*)filter;
 
-       if(_filter)
-       {
+       if (_filter) {
                *offset = _filter->offset;
                *count = _filter->count;
-       }
-       else
-       {
+       } else {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
@@ -1306,26 +1108,21 @@ int media_filter_get_condition(filter_h filter, char **condition, media_content_
        int ret = MEDIA_CONTENT_ERROR_NONE;
        filter_s *_filter = (filter_s*)filter;
 
-       if(_filter)
-       {
-               if(STRING_VALID(_filter->condition))
-               {
-                       *condition = strdup(_filter->condition);
-                       if(*condition == NULL)
-                       {
-                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                               return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-                       }
-               }
-               else
-               {
+       if (_filter) {
+               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);
+                       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;
                }
 
                *collate_type = _filter->condition_collate_type;
-       }
-       else
-       {
+       } else {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
@@ -1338,27 +1135,17 @@ int media_filter_get_order(filter_h filter, media_content_order_e* order_type, c
        int ret = MEDIA_CONTENT_ERROR_NONE;
        filter_s *_filter = (filter_s*)filter;
 
-       if(_filter)
-       {
-               if(STRING_VALID(_filter->order_keyword))
-               {
+       if (_filter) {
+               if (STRING_VALID(_filter->order_keyword) && _filter->is_full_order == false) {
                        *order_keyword = strdup(_filter->order_keyword);
-                       if(*order_keyword == NULL)
-                       {
-                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                               return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-                       }
-               }
-               else
-               {
+                       media_content_retvm_if(*order_keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+               } else {
                        *order_keyword = NULL;
                }
 
                *order_type = _filter->order_type;
                *collate_type = _filter->order_collate_type;
-       }
-       else
-       {
+       } else {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
                ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
@@ -1369,29 +1156,114 @@ int media_filter_get_order(filter_h filter, media_content_order_e* order_type, c
 int media_filter_get_storage(filter_h filter, char **storage_id)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
+       media_content_warn("DEPRECATION WARNING: media_filter_get_storage() is deprecated and will be removed from next release.");
        filter_s *_filter = (filter_s*)filter;
 
-       if(_filter)
-       {
-               if(STRING_VALID(_filter->storage_id))
-               {
+       if (_filter) {
+               if (STRING_VALID(_filter->storage_id)) {
                        *storage_id = strdup(_filter->storage_id);
-                       if(*storage_id == NULL)
-                       {
-                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                               return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-                       }
-               }
-               else
-               {
+                       media_content_retvm_if(*storage_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+               } else {
                        *storage_id = NULL;
                }
+       } else {
+               media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+               ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
-       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;
 }
+