[Refdb-cvs] CVS: refdb/src refdbdref.c,1.65.2.21,1.65.2.22
Status: Beta
Brought to you by:
mhoenicka
From: Markus H. <mho...@us...> - 2005-11-02 22:41:22
|
Update of /cvsroot/refdb/refdb/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2072 Modified Files: Tag: Release_0_9_5_stable refdbdref.c Log Message: delete_ref_by_id(): use remove_user_entries() to get rid of orphan users Index: refdbdref.c =================================================================== RCS file: /cvsroot/refdb/refdb/src/refdbdref.c,v retrieving revision 1.65.2.21 retrieving revision 1.65.2.22 diff -u -U2 -r1.65.2.21 -r1.65.2.22 --- refdbdref.c 26 Oct 2005 19:11:00 -0000 1.65.2.21 +++ refdbdref.c 2 Nov 2005 22:41:12 -0000 1.65.2.22 @@ -60,5 +60,5 @@ #include "risdata.h" -#define _GNU_SOURCE /* need this for long long support on some platforms */ +/* #define _GNU_SOURCE */ /* need this for long long support on some platforms */ /* some globals */ @@ -1220,6 +1220,6 @@ char* new_msg; int result; - unsigned long long n_id; - unsigned long long n_xid; + unsigned long long n_id = 0; + unsigned long long n_xid = 0; unsigned long long n_periodical_id; unsigned long long numrows; @@ -1294,12 +1294,17 @@ int used_by_other = 1; + if (dbi_result_next_row(dbires_user) == 0) { + dbi_result_free(dbires_user); + my_dbi_conn_unlock(conn); + my_dbi_conn_rollback(conn); + LOG_PRINT(LOG_WARNING, get_status_msg(234)); + return 234; + } + + /* save for later use */ + n_id = my_dbi_result_get_idval(dbires_user, "user_id"); + n_xid = my_dbi_result_get_idval(dbires_user, "xuser_id"); + if (dbi_result_get_numrows(dbires_user) == 1) { - if (dbi_result_next_row(dbires_user) == 0) { - dbi_result_free(dbires_user); - my_dbi_conn_unlock(conn); - my_dbi_conn_rollback(conn); - LOG_PRINT(LOG_WARNING, get_status_msg(234)); - return 234; - } if (!strcmp(ptr_clrequest->username, my_dbi_result_get_string(dbires_user, "user_name"))) { @@ -1451,5 +1456,5 @@ } - /* "delete" entry in main table */ + /* delete entry in main table */ sprintf(sql_command, "DELETE FROM t_refdb WHERE refdb_id="ULLSPEC, idval); LOG_PRINT(LOG_DEBUG, sql_command); @@ -1474,78 +1479,48 @@ dbi_result_free(dbires); - /* search orphans in t_user. The query returning dbires_user ran above */ - while (dbi_result_next_row(dbires_user)) { - n_id = my_dbi_result_get_idval(dbires_user, "user_id"); - n_xid = my_dbi_result_get_idval(dbires_user, "xuser_id"); - sprintf(sql_command, "SELECT xuser_id FROM t_xuser WHERE user_id="ULLSPEC, (unsigned long long)n_id); - LOG_PRINT(LOG_DEBUG, sql_command); - dbires1 = dbi_conn_query(conn, sql_command); - if (!dbires1) { - /* send message to client, reuse sql_command */ - sprintf(sql_command, "234:"ULLSPEC"\n", (unsigned long long)idval); - if ((new_msg = mstrcat(ptr_addresult->msg, sql_command, &(ptr_addresult->msg_len), 0)) == NULL) { - LOG_PRINT(LOG_CRIT, get_status_msg(801)); - return 801; - } - else { - ptr_addresult->msg = new_msg; - } - dbi_result_free(dbires_user); - my_dbi_conn_unlock(conn); - my_dbi_conn_rollback(conn); - LOG_PRINT(LOG_WARNING, get_status_msg(234)); - return 234; + /* search orphans in t_user. The query returning dbires_user ran + above. The loop should run only once */ + /* delete entry in xuser table */ + sprintf(sql_command, "DELETE FROM t_xuser WHERE xuser_id="ULLSPEC, (unsigned long long)n_xid); + LOG_PRINT(LOG_DEBUG, sql_command); + dbires = dbi_conn_query(conn, sql_command); + if (!dbires) { + /* send message to client, reuse sql_command */ + sprintf(sql_command, "234:"ULLSPEC"\n", (unsigned long long)idval); + if ((new_msg = mstrcat(ptr_addresult->msg, sql_command, &(ptr_addresult->msg_len), 0)) == NULL) { + LOG_PRINT(LOG_CRIT, get_status_msg(801)); + return 801; } - - numrows = dbi_result_get_numrows(dbires1); - - if (numrows == 1) { /* if no other reference uses this user */ - /* delete entry in t_user table */ - sprintf(sql_command, "DELETE FROM t_user WHERE user_id="ULLSPEC, (unsigned long long)n_id); - LOG_PRINT(LOG_DEBUG, sql_command); - dbires2 = dbi_conn_query(conn, sql_command); - if (!dbires2) { - /* send message to client, reuse sql_command */ - sprintf(sql_command, "247:"ULLSPEC"\n", (unsigned long long)idval); - if ((new_msg = mstrcat(ptr_addresult->msg, sql_command, &(ptr_addresult->msg_len), 0)) == NULL) { - LOG_PRINT(LOG_CRIT, get_status_msg(801)); - return 801; - } - else { - ptr_addresult->msg = new_msg; - } - dbi_result_free(dbires_user); - dbi_result_free(dbires1); - my_dbi_conn_unlock(conn); - my_dbi_conn_rollback(conn); - LOG_PRINT(LOG_WARNING, get_status_msg(247)); - return 247; - } - dbi_result_free(dbires2); + else { + ptr_addresult->msg = new_msg; } + dbi_result_free(dbires_user); + my_dbi_conn_unlock(conn); + my_dbi_conn_rollback(conn); + LOG_PRINT(LOG_WARNING, get_status_msg(234)); + return 234; + } - /* delete entry in xuser table */ - sprintf(sql_command, "DELETE FROM t_xuser WHERE xuser_id="ULLSPEC, (unsigned long long)n_xid); - LOG_PRINT(LOG_DEBUG, sql_command); - dbires2 = dbi_conn_query(conn, sql_command); - if (!dbires2) { - /* send message to client, reuse sql_command */ - sprintf(sql_command, "234:"ULLSPEC"\n", (unsigned long long)idval); - if ((new_msg = mstrcat(ptr_addresult->msg, sql_command, &(ptr_addresult->msg_len), 0)) == NULL) { - LOG_PRINT(LOG_CRIT, get_status_msg(801)); - return 801; - } - else { - ptr_addresult->msg = new_msg; - } + dbi_result_free(dbires); + + /* delete entry in user table */ + result = remove_user_entries(n_id, conn); + + if (result != 0 && result != 4) { + /* send message to client, reuse sql_command */ + sprintf(sql_command, "234:"ULLSPEC"\n", (unsigned long long)idval); + if ((new_msg = mstrcat(ptr_addresult->msg, sql_command, &(ptr_addresult->msg_len), 0)) == NULL) { dbi_result_free(dbires_user); - dbi_result_free(dbires1); - my_dbi_conn_unlock(conn); - my_dbi_conn_rollback(conn); - LOG_PRINT(LOG_WARNING, get_status_msg(234)); - return 234; + LOG_PRINT(LOG_CRIT, get_status_msg(801)); + return 801; + } + else { + ptr_addresult->msg = new_msg; } - dbi_result_free(dbires2); - dbi_result_free(dbires1); + dbi_result_free(dbires_user); + my_dbi_conn_unlock(conn); + my_dbi_conn_rollback(conn); + LOG_PRINT(LOG_WARNING, get_status_msg(234)); + return 234; } |