Seperate parsing and updating database to reduce CC(cyclomatic complexity) 49/226549/5
authorjiyong.min <jiyong.min@samsung.com>
Tue, 3 Mar 2020 04:00:31 +0000 (13:00 +0900)
committerjiyong.min <jiyong.min@samsung.com>
Wed, 4 Mar 2020 03:36:15 +0000 (12:36 +0900)
Change-Id: I5087a4bd1970e9f013b2609dd27c1fd544f4ac93

svc/media_controller_db_util.c

index ded1966597c88b016e28095f53d63b0ec1ebea20..eed5d54d326d00408e380823a4a11601cc7b2b0a 100644 (file)
@@ -634,17 +634,17 @@ static void  __playlist_cb(const char *key, const int type, const bundle_keyval_
        *query_list = g_list_append(*query_list, sql_str);
 }
 
-static int __parse_and_update_db(uid_t uid, gchar **params)
+static int __parse_db_request(gchar **params, char **sql_str)
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
-       char *sql_str = NULL;
+       char *_sql_str = NULL;
        int i_value = 0;
        int i_value_1 = 0;
        int i_value_2 = 0;
        unsigned long long llu_value = 0, llu_value2 = 0;
-       sqlite3* _db_handle = NULL;
 
        mc_retvm_if(!params, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid params");
+       mc_retvm_if(!sql_str, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid sql_str");
        mc_retvm_if((!params[0] || !params[1]),
                        MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
@@ -658,18 +658,18 @@ static int __parse_and_update_db(uid_t uid, gchar **params)
                mc_safe_strtoi(params[5], &i_value_2);
 
                if (MC_STRING_VALID(params[6]) && MC_STRING_VALID(params[7])) {
-                       sql_str = sqlite3_mprintf("UPDATE %q SET playback_state=%d, playback_position=%llu, playback_content_type=%d, age_rating=%d, playlist_name=%Q, playlist_index=%Q WHERE name=%Q",
+                       _sql_str = sqlite3_mprintf("UPDATE %q SET playback_state=%d, playback_position=%llu, playback_content_type=%d, age_rating=%d, playlist_name=%Q, playlist_index=%Q WHERE name=%Q",
                                MC_DB_TABLE_SERVER_INFO, i_value, llu_value, i_value_1, i_value_2, params[6], params[7], params[1]);
                } else if (MC_STRING_VALID(params[6])) {
-                       sql_str = sqlite3_mprintf("UPDATE %q SET playback_state=%d, playback_position=%llu, playback_content_type=%d, age_rating=%d, playlist_index=%Q WHERE name=%Q",
+                       _sql_str = sqlite3_mprintf("UPDATE %q SET playback_state=%d, playback_position=%llu, playback_content_type=%d, age_rating=%d, playlist_index=%Q WHERE name=%Q",
                                MC_DB_TABLE_SERVER_INFO, i_value, llu_value, i_value_1, i_value_2, params[6], params[1]);
                } else {
-                       sql_str = sqlite3_mprintf("UPDATE %q SET playback_state=%d, playback_position=%llu, playback_content_type=%d, age_rating=%d, playlist_name=NULL, playlist_index=NULL WHERE name=%Q",
+                       _sql_str = sqlite3_mprintf("UPDATE %q SET playback_state=%d, playback_position=%llu, playback_content_type=%d, age_rating=%d, playlist_name=NULL, playlist_index=NULL WHERE name=%Q",
                                MC_DB_TABLE_SERVER_INFO, i_value, llu_value, i_value_1, i_value_2, params[1]);
                }
 
        } else if (strncmp(MC_DB_CMD_UPDATE_META, params[0], strlen(MC_DB_CMD_UPDATE_META)) == 0) {
-               sql_str = sqlite3_mprintf("INSERT OR REPLACE INTO %q VALUES (%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q)",
+               _sql_str = sqlite3_mprintf("INSERT OR REPLACE INTO %q VALUES (%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q)",
                                MC_DB_TABLE_LATEST_META, params[1],
                                __replace_null(params[2]), __replace_null(params[3]), __replace_null(params[4]), __replace_null(params[5]),
                                __replace_null(params[6]), __replace_null(params[7]), __replace_null(params[8]), __replace_null(params[9]),
@@ -680,22 +680,22 @@ static int __parse_and_update_db(uid_t uid, gchar **params)
                mc_retvm_if(!params[2], MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
                mc_safe_strtoi(params[2], &i_value);
-               sql_str = sqlite3_mprintf("UPDATE %q SET shuffle_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+               _sql_str = sqlite3_mprintf("UPDATE %q SET shuffle_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
 
        } else if (strncmp(MC_DB_CMD_UPDATE_REPEAT, params[0], strlen(MC_DB_CMD_UPDATE_REPEAT)) == 0) {
                mc_retvm_if(!params[2], MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
                mc_safe_strtoi(params[2], &i_value);
-               sql_str = sqlite3_mprintf("UPDATE %q SET repeat_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+               _sql_str = sqlite3_mprintf("UPDATE %q SET repeat_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
 
        } else if (strncmp(MC_DB_CMD_UPDATE_LATEST, params[0], strlen(MC_DB_CMD_UPDATE_LATEST)) == 0) {
-               sql_str = sqlite3_mprintf("DELETE FROM %q; INSERT INTO %q VALUES ('%q');", MC_DB_TABLE_LATEST_SERVER, MC_DB_TABLE_LATEST_SERVER, params[1]);
+               _sql_str = sqlite3_mprintf("DELETE FROM %q; INSERT INTO %q VALUES ('%q');", MC_DB_TABLE_LATEST_SERVER, MC_DB_TABLE_LATEST_SERVER, params[1]);
 
 
        } else if (strncmp(MC_DB_CMD_ADD_PLAYLIST, params[0], strlen(MC_DB_CMD_ADD_PLAYLIST)) == 0) {
                mc_retvm_if(!params[2], MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
-               sql_str = sqlite3_mprintf("INSERT INTO %q(server_name, playlist_name) VALUES (%Q, %Q)", MC_DB_TABLE_PLAYLIST, params[1], params[2]);
+               _sql_str = sqlite3_mprintf("INSERT INTO %q(server_name, playlist_name) VALUES (%Q, %Q)", MC_DB_TABLE_PLAYLIST, params[1], params[2]);
 
        } else if (strncmp(MC_DB_CMD_UPDATE_PLAYLIST, params[0], strlen(MC_DB_CMD_UPDATE_PLAYLIST)) == 0) {
                bundle *bundle = NULL;
@@ -732,13 +732,13 @@ static int __parse_and_update_db(uid_t uid, gchar **params)
                                total_query_len += strlen(query);
                }
 
-               sql_str = (char *)calloc(1, total_query_len + 1);
+               _sql_str = (char *)calloc(1, total_query_len + 1);
 
                for (i = 2; i < list_len; i++) {
                        char *query = NULL;
                        query = g_list_nth_data(query_list, i);
                        if (query != NULL) {
-                               g_strlcat(sql_str, query, total_query_len + 1);
+                               g_strlcat(_sql_str, query, total_query_len + 1);
                                SQLITE3_SAFE_FREE(query);
                        }
                }
@@ -746,9 +746,9 @@ static int __parse_and_update_db(uid_t uid, gchar **params)
                query_list = NULL;
        } else if (strncmp(MC_DB_CMD_UPDATE_ICON, params[0], strlen(MC_DB_CMD_UPDATE_ICON)) == 0) {
                if (params[2])
-                       sql_str = sqlite3_mprintf("UPDATE %q SET icon_uri=%Q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, params[2], params[1]);
+                       _sql_str = sqlite3_mprintf("UPDATE %q SET icon_uri=%Q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, params[2], params[1]);
                else
-                       sql_str = sqlite3_mprintf("UPDATE %q SET icon_uri=NULL WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, params[1]);
+                       _sql_str = sqlite3_mprintf("UPDATE %q SET icon_uri=NULL WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, params[1]);
 
        } else if (strncmp(MC_DB_CMD_UPDATE_ABILITY, params[0], strlen(MC_DB_CMD_UPDATE_ABILITY)) == 0) {
                mc_retvm_if((!params[2] || !params[3]),
@@ -757,73 +757,81 @@ static int __parse_and_update_db(uid_t uid, gchar **params)
                mc_safe_strtoull(params[2], &llu_value);
                mc_safe_strtoull(params[3], &llu_value2);
 
-               sql_str = sqlite3_mprintf("UPDATE %q SET ability_decided=%llu, ability_supported=%llu WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, llu_value, llu_value2, params[1]);
+               _sql_str = sqlite3_mprintf("UPDATE %q SET ability_decided=%llu, ability_supported=%llu WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, llu_value, llu_value2, params[1]);
 
        } else if (strncmp(MC_DB_CMD_REMOVE_PLAYLIST, params[0], strlen(MC_DB_CMD_REMOVE_PLAYLIST)) == 0) {
                mc_retvm_if(!params[2], MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
-               sql_str = sqlite3_mprintf("DELETE FROM %q WHERE server_name=%Q and playlist_name=%Q", MC_DB_TABLE_PLAYLIST, params[1], params[2]);
+               _sql_str = sqlite3_mprintf("DELETE FROM %q WHERE server_name=%Q and playlist_name=%Q", MC_DB_TABLE_PLAYLIST, params[1], params[2]);
 
        } else if (strncmp(MC_DB_CMD_UPDATE_SUBTITLES, params[0], strlen(MC_DB_CMD_UPDATE_SUBTITLES)) == 0) {
                mc_retvm_if(!params[2], MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
                mc_safe_strtoi(params[2], &i_value);
-               sql_str = sqlite3_mprintf("UPDATE %q SET subtitles_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+               _sql_str = sqlite3_mprintf("UPDATE %q SET subtitles_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
 
        } else if (strncmp(MC_DB_CMD_UPDATE_DISPLAY_MODE, params[0], strlen(MC_DB_CMD_UPDATE_DISPLAY_MODE)) == 0) {
                mc_retvm_if(!params[2], MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
                mc_safe_strtoi(params[2], &i_value);
-               sql_str = sqlite3_mprintf("UPDATE %q SET display_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+               _sql_str = sqlite3_mprintf("UPDATE %q SET display_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
 
        } else if (strncmp(MC_DB_CMD_UPDATE_DISPLAY_ROTATION, params[0], strlen(MC_DB_CMD_UPDATE_DISPLAY_ROTATION)) == 0) {
                mc_retvm_if(!params[2], MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
                mc_safe_strtoi(params[2], &i_value);
-               sql_str = sqlite3_mprintf("UPDATE %q SET display_rotation=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+               _sql_str = sqlite3_mprintf("UPDATE %q SET display_rotation=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
 
        } else if (strncmp(MC_DB_CMD_UPDATE_360, params[0], strlen(MC_DB_CMD_UPDATE_360)) == 0) {
                mc_retvm_if(!params[2], MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
                mc_safe_strtoi(params[2], &i_value);
-               sql_str = sqlite3_mprintf("UPDATE %q SET spherical_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+               _sql_str = sqlite3_mprintf("UPDATE %q SET spherical_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
 
        } else {
                mc_error("invalid request [%s]", params[0]);
                return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
        }
 
-       if (sql_str) {
-               ret = mc_db_connect(&_db_handle, uid, TRUE);
-               if (ret != MEDIA_CONTROLLER_ERROR_NONE)
-                       mc_error("mc_db_connect error : %d", ret);
+       *sql_str = _sql_str;
 
-               ret = mc_db_util_update_db(_db_handle, sql_str);
-               if (ret != MEDIA_CONTROLLER_ERROR_NONE)
-                       mc_error("media_db_update_db error : %d", ret);
+       return ret;
+}
 
-               /* Update vconf */
-               if (strncmp(MC_DB_CMD_UPDATE_LATEST, params[0], strlen(MC_DB_CMD_UPDATE_LATEST)) == 0) {
-                       ret = __mc_update_latest_server_info_to_vconf(params[1], MC_SERVER_STATE_ACTIVATE, MC_PLAYBACK_STATE_PLAYING);
+static int __update_db_request(uid_t uid, gchar **params, const char *sql_str)
+{
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
+       sqlite3* db_handle = NULL;
+       int i_value = 0;
 
-               } else if (strncmp(MC_DB_CMD_UPDATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_PLAYBACK)) == 0) {
-                       if (__mc_db_is_latest(_db_handle, params[1])) {
-                               mc_safe_strtoi(params[2], &i_value);
-                               ret = __mc_update_latest_server_state_to_vconf(MC_SERVER_STATE_ACTIVATE, i_value);
-                       }
-               } else if (strncmp(MC_DB_CMD_UPDATE_PLAYLIST, params[0], strlen(MC_DB_CMD_UPDATE_PLAYLIST)) == 0) {
-                       MC_SAFE_FREE(sql_str);
-               }
+       mc_retvm_if(!params, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid params");
+       mc_retvm_if(!sql_str, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid sql_str");
+       mc_retvm_if((!params[0] || !params[1]),
+                       MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
 
-               mc_db_disconnect(_db_handle);
+       ret = mc_db_connect(&db_handle, uid, TRUE);
+       if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+               mc_error("mc_db_connect error : %d", ret);
 
-               SQLITE3_SAFE_FREE(sql_str);
+       ret = mc_db_util_update_db(db_handle, sql_str);
+       if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+               mc_error("media_db_update_db error : %d", ret);
 
-       } else {
-               mc_error("sql_str is NULL");
-               ret = MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
+       /* Update vconf */
+       if (strncmp(MC_DB_CMD_UPDATE_LATEST, params[0], strlen(MC_DB_CMD_UPDATE_LATEST)) == 0) {
+               ret = __mc_update_latest_server_info_to_vconf(params[1], MC_SERVER_STATE_ACTIVATE, MC_PLAYBACK_STATE_PLAYING);
+
+       } else if (strncmp(MC_DB_CMD_UPDATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_PLAYBACK)) == 0) {
+               mc_retvm_if(!params[2], MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid query");
+
+               if (__mc_db_is_latest(db_handle, params[1])) {
+                       mc_safe_strtoi(params[2], &i_value);
+                       ret = __mc_update_latest_server_state_to_vconf(MC_SERVER_STATE_ACTIVATE, i_value);
+               }
        }
 
+       mc_db_disconnect(db_handle);
+
        return ret;
 }
 
@@ -831,6 +839,7 @@ int mc_db_request(uid_t uid, const char *data, int data_size)
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        gchar **params = NULL;
+       char *sql_str = NULL;
 
        mc_retvm_if(!data, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid data");
        mc_retvm_if(data_size <= 0 , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid data_size");
@@ -838,8 +847,15 @@ int mc_db_request(uid_t uid, const char *data, int data_size)
        params = g_strsplit(data, MC_STRING_DELIMITER, 0);
        mc_retvm_if(!params, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail to parsing query");
 
-       ret = __parse_and_update_db(uid, params);
+       ret = __parse_db_request(params, &sql_str);
+       if (ret == MEDIA_CONTROLLER_ERROR_NONE)
+               ret = __update_db_request(uid, params, sql_str);
 
+       if (strncmp(MC_DB_CMD_UPDATE_PLAYLIST, params[0], strlen(MC_DB_CMD_UPDATE_PLAYLIST)) == 0) {
+               MC_SAFE_FREE(sql_str);
+       } else {
+               SQLITE3_SAFE_FREE(sql_str);
+       }
        g_strfreev(params);
 
        return ret;