Match columns of storage with filter keyword
[platform/core/api/media-content.git] / src / media_tag.c
index b500db0..884eccc 100755 (executable)
@@ -58,12 +58,10 @@ static int __media_tag_insert_item_to_tag(int tag_id, const char *media_id)
        int ret = MEDIA_CONTENT_ERROR_NONE;
        char *query_str = NULL;
 
-       query_str = sqlite3_mprintf("INSERT INTO %q (tag_id, media_uuid) values (%d, '%q')",
-                       DB_TABLE_TAG_MAP, tag_id, media_id);
-       ret = _content_query_sql(query_str);
-       SQLITE3_SAFE_FREE(query_str);
+       query_str = sqlite3_mprintf("INSERT INTO %q (tag_id, media_uuid) values (%d, '%q');", DB_TABLE_TAG_MAP, tag_id, media_id);
+       ret = media_svc_append_query(query_str, _content_get_uid());
 
-       return ret;
+       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
 }
 
 static int __media_tag_remove_item_from_tag(int tag_id, const char *media_id)
@@ -72,11 +70,9 @@ static int __media_tag_remove_item_from_tag(int tag_id, const char *media_id)
        char *query_str = NULL;
 
        query_str = sqlite3_mprintf(REMOVE_TAG_ITEM_FROM_TAG_MAP, tag_id, media_id);
+       ret = media_svc_append_query(query_str, _content_get_uid());
 
-       ret = _content_query_sql(query_str);
-       SQLITE3_SAFE_FREE(query_str);
-
-       return ret;
+       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
 }
 
 static int __media_tag_update_tag_name(int tag_id, const char *tag_name)
@@ -85,11 +81,9 @@ static int __media_tag_update_tag_name(int tag_id, const char *tag_name)
        char *query_str = NULL;
 
        query_str = sqlite3_mprintf(UPDATE_TAG_NAME_FROM_TAG, tag_name, tag_id);
+       ret = media_svc_append_query(query_str, _content_get_uid());
 
-       ret = _content_query_sql(query_str);
-       SQLITE3_SAFE_FREE(query_str);
-
-       return ret;
+       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
 }
 
 static int __media_tag_get_tag_info_from_db(const char *name, media_tag_h tag)
@@ -97,8 +91,6 @@ static int __media_tag_get_tag_info_from_db(const char *name, media_tag_h tag)
        int ret = MEDIA_CONTENT_ERROR_NONE;
        sqlite3_stmt *stmt = NULL;
        char *select_query = NULL;
-       int id = 0;
-       char *tag_name = NULL;
        media_tag_s *_tag = (media_tag_s*)tag;
 
        media_content_retvm_if(_tag == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid tag");
@@ -109,16 +101,14 @@ static int __media_tag_get_tag_info_from_db(const char *name, media_tag_h tag)
        SQLITE3_SAFE_FREE(select_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       while (sqlite3_step(stmt) == SQLITE_ROW) {
-               SAFE_FREE(tag_name);
-
-               id = (int)sqlite3_column_int(stmt, 0);
-               tag_name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
+       if (sqlite3_step(stmt) == SQLITE_ROW) {
+               _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
+               _tag->name = g_strdup(name);
+       } else {
+               media_content_error("Nonexistent tag name[%s]", name);
+               ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
 
-       _tag->tag_id = id;
-       _tag->name = tag_name;
-
        SQLITE3_FINALIZE(stmt);
 
        return ret;
@@ -239,6 +229,7 @@ int media_tag_destroy(media_tag_h tag)
 
        return ret;
 }
+
 int media_tag_clone(media_tag_h *dst, media_tag_h src)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
@@ -310,7 +301,7 @@ int media_tag_get_tag_from_db(int tag_id, media_tag_h *tag)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        sqlite3_stmt *stmt = NULL;
-       char select_query[DEFAULT_QUERY_SIZE];
+       char select_query[DEFAULT_QUERY_SIZE] = {0, };
 
        if (tag_id <= 0) {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
@@ -326,10 +317,7 @@ int media_tag_get_tag_from_db(int tag_id, media_tag_h *tag)
 
        media_tag_s *_tag = NULL;
 
-       while (sqlite3_step(stmt) == SQLITE_ROW) {
-               if (_tag)
-                       media_tag_destroy((media_tag_h)_tag);
-
+       if (sqlite3_step(stmt) == SQLITE_ROW) {
                _tag = (media_tag_s*)calloc(1, sizeof(media_tag_s));
                if (_tag == NULL) {
                        SQLITE3_FINALIZE(stmt);
@@ -337,10 +325,13 @@ int media_tag_get_tag_from_db(int tag_id, media_tag_h *tag)
                        return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
                }
 
-               _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
-               _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
+               _tag->tag_id = tag_id;
+               _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
 
                *tag = (media_tag_h)_tag;
+       } else {
+               media_content_error("Nonexistent tag id[%d]", tag_id);
+               ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
        }
 
        SQLITE3_FINALIZE(stmt);
@@ -402,7 +393,7 @@ int media_tag_remove_media(media_tag_h tag, const char *media_id)
        return ret;
 }
 
-int media_tag_set_name(media_tag_h tag, char *tag_name)
+int media_tag_set_name(media_tag_h tag, const char *tag_name)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        media_tag_s *_tag = (media_tag_s*)tag;
@@ -463,31 +454,100 @@ int media_tag_update_to_db(media_tag_h tag)
                _tag_item = (media_tag_item_s*)g_list_nth_data(_tag->item_list, idx);
                if (_tag_item != NULL) {
                        switch (_tag_item->function) {
-                               case MEDIA_TAG_ADD:
-                               {
-                                       ret = __media_tag_insert_item_to_tag(_tag->tag_id, _tag_item->media_id);
-                               }
-                               break;
-
-                               case MEDIA_TAG_REMOVE:
-                               {
-                                       ret = __media_tag_remove_item_from_tag(_tag->tag_id, _tag_item->media_id);
-                               }
-                               break;
-
-                               case MEDIA_TAG_UPDATE_TAG_NAME:
-                               {
-                                       ret = __media_tag_update_tag_name(_tag->tag_id, _tag_item->tag_name);
-                               }
-                               break;
-
-                               default:
-                               break;
+                       case MEDIA_TAG_ADD:
+                       {
+                               ret = __media_tag_insert_item_to_tag(_tag->tag_id, _tag_item->media_id);
+                       }
+                       break;
+
+                       case MEDIA_TAG_REMOVE:
+                       {
+                               ret = __media_tag_remove_item_from_tag(_tag->tag_id, _tag_item->media_id);
+                       }
+                       break;
+
+                       case MEDIA_TAG_UPDATE_TAG_NAME:
+                       {
+                               ret = __media_tag_update_tag_name(_tag->tag_id, _tag_item->tag_name);
+                       }
+                       break;
+
+                       default:
+                       break;
                        }
+
+                       if (ret != MEDIA_CONTENT_ERROR_NONE)
+                               media_content_error("Failed some operation[%d]", _tag_item->function);
                }
        }
 
+       ret = media_svc_send_query(_content_get_uid());
+
        __media_tag_item_release(_tag);
 
+       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
+}
+
+int media_tag_create(media_tag_h *tag)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+
+       media_content_retvm_if(tag == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid tag");
+
+       media_tag_s *_tag = (media_tag_s*)calloc(1, sizeof(media_tag_s));
+       media_content_retvm_if(_tag == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+
+       _tag->tag_id = -1;
+       _tag->name = NULL;
+       _tag->item_list = NULL;
+
+       *tag = (media_tag_h)_tag;
+
        return ret;
 }
+
+int media_tag_insert_to_db_v2(media_tag_h tag)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       media_tag_s *_tag = (media_tag_s*)tag;
+       media_tag_h tag_1;
+       int tag_id = -1;
+
+       media_content_retvm_if(_tag == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid tag");
+       media_content_retvm_if(!STRING_VALID(_tag->name), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid tag name");
+       media_content_retvm_if(_tag->tag_id != -1, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid tag insert");
+
+       ret = media_tag_insert_to_db(_tag->name, &tag_1);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               media_content_error("fail media_tag_insert_to_db");
+               goto ERROR;
+       }
+
+       ret = media_tag_get_tag_id(tag_1, &tag_id);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               media_content_error("fail media_tag_get_tag_id");
+               goto ERROR;
+       }
+
+        _tag->tag_id = tag_id;
+
+       ret = media_tag_update_to_db(tag);
+
+ERROR:
+       __media_tag_item_release(_tag);
+       media_tag_destroy(tag_1);
+
+       return ret;
+}
+
+int media_tag_update_to_db_v2(int tag_id, media_tag_h tag)
+{
+       media_tag_s *_tag = (media_tag_s*)tag;
+
+       media_content_retvm_if(_tag == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid tag");
+       media_content_retvm_if(tag_id == -1, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid tag update");
+
+       _tag->tag_id = tag_id;
+
+       return media_tag_update_to_db(tag);
+}