Delete function for count-only 20/207820/11 accepted/tizen/unified/20190618.050011 submit/tizen/20190617.081601
authorMinje Ahn <minje.ahn@samsung.com>
Thu, 13 Jun 2019 04:59:44 +0000 (13:59 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Mon, 17 Jun 2019 05:24:02 +0000 (14:24 +0900)
Change-Id: I01420453bdf44e1f3707ed0fc9095f16d4edeeb1
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
include/media_controller_private.h
src/media_controller_db.c

index 6f6724c555ac498a77311b68c2db2ea92533b3bc..5e735584a78c51498b5a4c479cc5fa741c187d6c 100644 (file)
@@ -132,9 +132,7 @@ extern "C" {
 #define MC_DB_TRIGGER_PLAYLIST "cleanup_playlist"
 #define MC_DB_TRIGGER_SERVER   "cleanup_server"
 
-/* QUERY SET */
-#define SELECT_KEY_FROM_SERVER_INFO "SELECT %q FROM "MC_DB_TABLE_SERVER_INFO" WHERE name=%Q"
-
+/* METADATA COLUMNS */
 #define META_LIST      "title, artist, album, author, genre, duration, date, copyright, description, track_num, picture, season, episode, resolution"
 #define META_COL "title TEXT, artist TEXT, album TEXT, author TEXT, genre TEXT, duration INTEGER DEFAULT 0, date TEXT, copyright TEXT, description TEXT, track_num TEXT, picture TEXT, season TEXT, episode TEXT, resolution TEXT"
 
index 5f9c75917fb479a4767158be7d7cef4a0c49f54c..97b463c875a3107a3291a740bb24d0338cb9a754 100644 (file)
@@ -27,47 +27,28 @@ static int __mc_db_update_db(mc_priv_type_e priv_type, const char *sql_str)
        return mc_ipc_send_message_to_server(MC_MSG_DB_UPDATE, priv_type, sql_str);
 }
 
-static int __mc_db_get_single_result(sqlite3 *handle, char *sql_str, sqlite3_stmt **stmt)
+static int __mc_db_get_record(sqlite3 *handle, char *sql_str, sqlite3_stmt **stmt)
 {
        int ret = SQLITE_OK;
+       sqlite3_stmt *statement = NULL;
 
        mc_retvm_if(handle == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid handle");
        mc_retvm_if(stmt == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "sqlite3_stmt is null");
        mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null");
 
-       ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), stmt, NULL);
+       ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &statement, NULL);
        SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != SQLITE_OK, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "prepare error [%s]", sqlite3_errmsg(handle));
 
-       if (sqlite3_step(*stmt) != SQLITE_ROW) {
+       if (sqlite3_step(statement) != SQLITE_ROW) {
                mc_error("end of row [%s]", sqlite3_errmsg(handle));
-               SQLITE3_FINALIZE(*stmt);
+               SQLITE3_FINALIZE(statement);
                return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
        }
 
-       return MEDIA_CONTROLLER_ERROR_NONE;
-}
-
-static int __mc_db_get_count(sqlite3 *handle, const char *sql_str)
-{
-       int ret = MEDIA_CONTROLLER_ERROR_NONE;
-       sqlite3_stmt *stmt = NULL;
-       int count = 0;
-
-       mc_retvm_if(handle == NULL, 0, "invalid handle");
-       mc_retvm_if(sql_str == NULL, 0, "invalid sql_str");
-
-       ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &stmt, NULL);
-       mc_retvm_if(SQLITE_OK != ret, 0, "prepare error [%s]", sqlite3_errmsg(handle));
-
-       if (sqlite3_step(stmt) == SQLITE_ROW)
-               count = sqlite3_column_int(stmt, 0);
-       else
-               mc_error("end of row [%s]", sqlite3_errmsg(handle));
-
-       SQLITE3_FINALIZE(stmt);
+       *stmt = statement;
 
-       return count;
+       return MEDIA_CONTROLLER_ERROR_NONE;
 }
 
 int mc_db_update_playback_info(const char *server_name, const media_controller_playback_s playback)
@@ -252,8 +233,8 @@ int mc_db_get_playback_info(sqlite3 *handle, const char *server_name, mc_playbac
        sql_str = sqlite3_mprintf("SELECT playback_state, playback_position, playlist_name, playlist_index, playback_content_type, age_rating FROM %q WHERE name=%Q",
                MC_DB_TABLE_SERVER_INFO, server_name);
 
-       ret = __mc_db_get_single_result(handle, sql_str, &stmt);
-       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_single_result failed [%d]", ret);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret);
 
        _playback = (media_controller_playback_s *)calloc(1, sizeof(media_controller_playback_s));
        if (!_playback) {
@@ -318,8 +299,8 @@ int mc_db_get_metadata_info(sqlite3 *handle, const char *server_name, mc_metadat
 
        sql_str = sqlite3_mprintf("SELECT %s FROM %q WHERE name=%Q", META_LIST, MC_DB_TABLE_LATEST_META, server_name);
 
-       ret = __mc_db_get_single_result(handle, sql_str, &stmt);
-       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_single_result failed [%d]", ret);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret);
 
        ret = __mc_db_get_metadata(stmt, 0, metadata);
        SQLITE3_FINALIZE(stmt);
@@ -339,8 +320,8 @@ int mc_db_get_shuffle_mode(sqlite3 *handle, const char *server_name, mc_shuffle_
 
        sql_str = sqlite3_mprintf("SELECT shuffle_mode FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
 
-       ret = __mc_db_get_single_result(handle, sql_str, &stmt);
-       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_single_result failed [%d]", ret);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret);
 
        *mode = sqlite3_column_int(stmt, 0);
        SQLITE3_FINALIZE(stmt);
@@ -360,8 +341,8 @@ int mc_db_get_repeat_mode(sqlite3 *handle, const char *server_name, mc_repeat_mo
 
        sql_str = sqlite3_mprintf("SELECT repeat_mode FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
 
-       ret = __mc_db_get_single_result(handle, sql_str, &stmt);
-       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_single_result failed [%d]", ret);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret);
 
        *mode = sqlite3_column_int(stmt, 0);
        SQLITE3_FINALIZE(stmt);
@@ -381,8 +362,8 @@ int mc_db_get_icon_uri(sqlite3 *handle, const char *server_name, char **uri)
 
        sql_str = sqlite3_mprintf("SELECT icon_uri FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
 
-       ret = __mc_db_get_single_result(handle, sql_str, &stmt);
-       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_single_result failed [%d]", ret);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret);
 
        *uri = g_strdup((const char *)sqlite3_column_text(stmt, 0));
        SQLITE3_FINALIZE(stmt);
@@ -403,8 +384,8 @@ static int __mc_db_get_ability(sqlite3 *handle, const char *server_name, unsigne
 
        sql_str = sqlite3_mprintf("SELECT ability_decided, ability_supported FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
 
-       ret = __mc_db_get_single_result(handle, sql_str, &stmt);
-       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_single_result failed [%d]", ret);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret);
 
        *decided = (unsigned long long)sqlite3_column_int64(stmt, 0);
        *supported = (unsigned long long)sqlite3_column_int64(stmt, 1);
@@ -465,17 +446,21 @@ int mc_db_get_pb_action_ability(sqlite3 *handle, const char *server_name, mc_pla
 
 int _mc_db_get_playlist_count(sqlite3 *handle, const char *server_name)
 {
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
        int count = 0;
+       sqlite3_stmt *stmt = NULL;
 
        mc_retvm_if(handle == NULL, 0, "invalid handle");
        mc_retvm_if(server_name == NULL, 0, "invalid server_name");
 
        sql_str = sqlite3_mprintf("SELECT COUNT(DISTINCT playlist_name) FROM %q WHERE server_name = %Q", MC_DB_TABLE_PLAYLIST, server_name);
-       mc_retvm_if(!MC_STRING_VALID(sql_str), 0, "SQL string is null");
 
-       count = __mc_db_get_count(handle, sql_str);
-       SQLITE3_SAFE_FREE(sql_str);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, 0, "__mc_db_get_record failed [%d]", ret);
+
+       count = sqlite3_column_int(stmt, 0);
+       SQLITE3_FINALIZE(stmt);
 
        return count;
 }
@@ -523,23 +508,23 @@ int mc_db_get_foreach_playlist(sqlite3 *handle, const char *server_name, mc_play
 
 gboolean _mc_db_is_playlist_exist(sqlite3 *handle, const char *server_name, const char *playlist_name)
 {
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
-       int count = 0;
+       sqlite3_stmt *stmt = NULL;
 
        mc_retvm_if(!handle, FALSE, "Invalid handle");
        mc_retvm_if(!server_name, FALSE, "Invalid server_name");
        mc_retvm_if(!playlist_name, FALSE, "Invalid playlist_name");
 
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE server_name=%Q AND playlist_name=%Q", MC_DB_TABLE_PLAYLIST, server_name, playlist_name);
-       mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "SQL string is null");
 
-       count = __mc_db_get_count(handle, sql_str);
-       SQLITE3_SAFE_FREE(sql_str);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
 
-       if (count > 0)
-               return TRUE;
+       ret = sqlite3_column_int(stmt, 0);
+       SQLITE3_FINALIZE(stmt);
 
-       return FALSE;
+       return (ret == 0) ? FALSE : TRUE;
 }
 
 int mc_db_get_playlist_by_name(sqlite3 *handle, mc_priv_type_e type, const char *controller_name, const char *playlist_name, mc_playlist_h *playlist)
@@ -578,18 +563,22 @@ int mc_db_get_playlist_by_name(sqlite3 *handle, mc_priv_type_e type, const char
 
 int _mc_db_get_playlist_item_count(sqlite3 *handle, const char *server_name, char *playlist_name)
 {
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
        int count = 0;
+       sqlite3_stmt *stmt = NULL;
 
        mc_retvm_if(handle == NULL, 0, "invalid handle");
        mc_retvm_if(server_name == NULL, 0, "invalid server_name");
        mc_retvm_if(playlist_name == NULL, 0, "invalid playlist_name");
 
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE server_name=%Q AND playlist_name=%Q AND item_index IS NOT NULL", MC_DB_TABLE_PLAYLIST, server_name, playlist_name);
-       mc_retvm_if(!MC_STRING_VALID(sql_str), 0, "SQL string is null");
 
-       count = __mc_db_get_count(handle, sql_str);
-       SQLITE3_SAFE_FREE(sql_str);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, 0, "__mc_db_get_record failed [%d]", ret);
+
+       count = sqlite3_column_int(stmt, 0);
+       SQLITE3_FINALIZE(stmt);
 
        return count;
 }
@@ -641,8 +630,9 @@ int mc_db_get_playlist_item(sqlite3 *handle, const char *server_name, char *play
 
 gboolean mc_db_is_exist_server(sqlite3 *handle, const char *server_name)
 {
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
-       int count = 0;
+       sqlite3_stmt *stmt = NULL;
 
        mc_retvm_if(handle == NULL, FALSE, "Handle is NULL");
        mc_retvm_if(server_name == NULL, FALSE, "server_name is NULL");
@@ -650,15 +640,16 @@ gboolean mc_db_is_exist_server(sqlite3 *handle, const char *server_name)
        mc_secure_debug("server_name [%s]", server_name);
 
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name='%q'", MC_DB_TABLE_SERVER_INFO, server_name);
-       mc_retvm_if(!MC_STRING_VALID(sql_str), FALSE, "SQL string is null");
 
-       count = __mc_db_get_count(handle, sql_str);
-       SQLITE3_SAFE_FREE(sql_str);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
 
-       if (count <= 0) {
-               mc_debug("No server info [%s]", server_name);
-               mc_db_foreach_server_list(handle, NULL, NULL);
+       ret = sqlite3_column_int(stmt, 0);
+       SQLITE3_FINALIZE(stmt);
 
+       if (ret == 0) {
+               mc_secure_error("No server info [%s]", server_name);
+               mc_db_foreach_server_list(handle, NULL, NULL);
                return FALSE;
        }
 
@@ -667,8 +658,9 @@ gboolean mc_db_is_exist_server(sqlite3 *handle, const char *server_name)
 
 gboolean _mc_db_is_activated_client(sqlite3 *handle, const char *client_name)
 {
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
-       int count = 0;
+       sqlite3_stmt *stmt = NULL;
 
        mc_retvm_if(handle == NULL, FALSE, "Handle is NULL");
        mc_retvm_if(client_name == NULL, FALSE, "client_name is NULL");
@@ -676,15 +668,16 @@ gboolean _mc_db_is_activated_client(sqlite3 *handle, const char *client_name)
        mc_secure_debug("client name [%s]", client_name);
 
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name='%q' AND type=%d", MC_DB_TABLE_APP_LIST, client_name, MC_PRIV_TYPE_CLIENT);
-       mc_retvm_if(!MC_STRING_VALID(sql_str), FALSE, "SQL string is null");
 
-       count = __mc_db_get_count(handle, sql_str);
-       SQLITE3_SAFE_FREE(sql_str);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
+
+       ret = sqlite3_column_int(stmt, 0);
+       SQLITE3_FINALIZE(stmt);
 
-       if (count <= 0) {
+       if (ret == 0) {
                mc_secure_error("[%s] is not activated", client_name);
                mc_db_foreach_client_list(handle, NULL, NULL);
-
                return FALSE;
        }
 
@@ -693,8 +686,9 @@ gboolean _mc_db_is_activated_client(sqlite3 *handle, const char *client_name)
 
 gboolean _mc_db_is_activated_server(sqlite3 *handle, const char *server_name)
 {
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
-       int count = 0;
+       sqlite3_stmt *stmt = NULL;
 
        mc_retvm_if(handle == NULL, FALSE, "Handle is NULL");
        mc_retvm_if(server_name == NULL, FALSE, "server_name is NULL");
@@ -702,15 +696,16 @@ gboolean _mc_db_is_activated_server(sqlite3 *handle, const char *server_name)
        mc_secure_debug("server name [%s]", server_name);
 
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name='%q' AND type=%d", MC_DB_TABLE_APP_LIST, server_name, MC_PRIV_TYPE_SERVER);
-       mc_retvm_if(!MC_STRING_VALID(sql_str), FALSE, "SQL string is null");
 
-       count = __mc_db_get_count(handle, sql_str);
-       SQLITE3_SAFE_FREE(sql_str);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
 
-       if (count <= 0) {
+       ret = sqlite3_column_int(stmt, 0);
+       SQLITE3_FINALIZE(stmt);
+
+       if (ret == 0) {
                mc_secure_error("[%s] is not activated", server_name);
                mc_db_foreach_server_list(handle, NULL, NULL);
-
                return FALSE;
        }
 
@@ -719,8 +714,9 @@ gboolean _mc_db_is_activated_server(sqlite3 *handle, const char *server_name)
 
 gboolean _mc_db_is_latest_server(sqlite3 *handle, const char *server_name)
 {
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
-       int count = 0;
+       sqlite3_stmt *stmt = NULL;
 
        mc_retvm_if(!handle, FALSE, "Handle is NULL");
        mc_retvm_if(!server_name, FALSE, "server_name is NULL");
@@ -728,20 +724,16 @@ gboolean _mc_db_is_latest_server(sqlite3 *handle, const char *server_name)
        mc_secure_debug("server name [%s]", server_name);
 
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name=%Q", MC_DB_TABLE_LATEST_SERVER, server_name);
-       mc_retvm_if(!MC_STRING_VALID(sql_str), FALSE, "SQL string is null");
 
-       count = __mc_db_get_count(handle, sql_str);
-       SQLITE3_SAFE_FREE(sql_str);
+       ret = __mc_db_get_record(handle, sql_str, &stmt);
+       mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
 
-       if (count <= 0) {
-               mc_secure_debug("[%s] is not latest", server_name);
-               return FALSE;
-       }
+       ret = sqlite3_column_int(stmt, 0);
+       SQLITE3_FINALIZE(stmt);
 
-       return TRUE;
+       return (ret == 0) ? FALSE : TRUE;
 }
 
-
 int mc_db_foreach_server_list(sqlite3 *handle, mc_activated_server_cb callback, void *user_data)
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;