char *str;
} token_t;
-
-#define MAX_LEFT_VALUE 512
-#define SPACE_LEN 1
-#define SPACE " "
#define UNKNOWN_TYPE 1000
#define STRING_TYPE 100
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)
{
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;
-
- media_content_retvm_if(condition == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid condition");
- media_content_retvm_if(generated_condition == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid generated_condition");
- media_content_retvm_if(attr == NULL, MEDIA_CONTENT_ERROR_DB_FAILED, "DB field mapping table doesn't exist. Check db connection");
-
- 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);
-
- 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 */
- 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);
-
- 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);
- }
- }
-
- 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);
- }
-
- /* Always close in here (condition collate option issue)*/
- SAFE_STRLCAT(*generated_condition, QUERY_KEYWORD_BRACKET, size);
-
- /* media_content_debug("statement : %s(%d) (total:%d)", *generated_condition, strlen(*generated_condition), total_str_size); */
- media_content_sec_debug("Condition : %s", *generated_condition);
-
- /* if(*generated_condition != NULL)
- res = 1; */
-
- if (token_list != NULL)
- g_list_free(token_list);
-
- 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;
+ 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");
_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 (__tokenize(&token_list, _filter->condition) < 0) {
media_content_error("INVALID_PARAMETER(0x%08x):Invalid the condition", 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) {
+ 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 */
- /*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);
+ memset(tmp_condition, 0, sizeof(tmp_condition));
+ SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_OPEN_BRACKET, sizeof(tmp_condition));
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_STRLCAT(tmp_condition, token->str, sizeof(tmp_condition));
+ SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_SPACE, sizeof(tmp_condition));
SAFE_FREE(token->str);
SAFE_FREE(token);
}
}
- SAFE_STRLCAT(*generated_condition, QUERY_KEYWORD_BRACKET, size);
+ /* 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));
+ }
+
+ SAFE_STRLCAT(tmp_condition, QUERY_KEYWORD_BRACKET, sizeof(tmp_condition));
+
+ if (STRING_VALID(tmp_condition))
+ *generated_condition = g_strdup(tmp_condition);
+ else
+ *generated_condition = NULL;
media_content_sec_debug("Condition : %s", *generated_condition);
{
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;
+ 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");
_filter = (filter_s*)filter;
- memset(option_query, 0x00, sizeof(option_query));
+ 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;
- int total_str_size = 0;
GList *token_list = NULL;
token_t *token;
char *attr_str;
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));
SAFE_FREE(replace_str);
} else {
media_content_error("There is no matched db field for %s", token->str);
+ 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 */
- char *generated_condition = NULL;
- size = total_str_size + COLLATE_STR_SIZE + 1;
- generated_condition = (char*)calloc(size, sizeof(char));
+ 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)) {
- /* media_content_debug("[%d] %s", idx, token->str); */
- SAFE_STRLCAT(generated_condition, token->str, size);
- SAFE_STRLCAT(generated_condition, SPACE, size);
+ 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;
+ }
} else {
- SAFE_STRLCAT(option_query, _filter->order_keyword, sizeof(option_query));
- media_content_error("option_query [%s]", option_query);
+ SAFE_STRLCAT(query, _filter->order_keyword, sizeof(query));
}
}
/* 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 = g_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;
}
unsigned int idx = 0;
GList *token_list = NULL;
int ret = MEDIA_CONTENT_ERROR_NONE;
- token_t *token;
+ token_t *token = NULL;
filter_s * _filter = NULL;
char query[DEFAULT_QUERY_SIZE] = {0, };
char option[DEFAULT_QUERY_SIZE] = {0, };
_filter = (filter_s*)filter;
+ memset(query, 0, sizeof(query));
+
/* Order by*/
if (STRING_VALID(_filter->order_keyword)) {
if (__tokenize_attribute(&token_list, _filter->order_keyword) < 0) {
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)) {
SAFE_FREE(token->str);
token->str = replace_str;
+ } else {
+ SAFE_FREE(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_STRLCAT(query, QUERY_KEYWORD_SPACE, sizeof(query));
SAFE_FREE(token->str);
SAFE_FREE(token);
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)) {
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) {