Author: carlosg Date: Thu Feb 14 18:11:28 2008 New Revision: 1128 URL: http://svn.gnome.org/viewvc/tracker?rev=1128&view=rev
Log: 2008-02-14 Carlos Garnacho <[EMAIL PROTECTED]> * src/trackerd/tracker-db-sqlite.c (tracker_exec_proc): Store directly results in a GPtrArray. Bug #513691. Modified: trunk/ChangeLog trunk/src/trackerd/tracker-db-sqlite.c Modified: trunk/src/trackerd/tracker-db-sqlite.c ============================================================================== --- trunk/src/trackerd/tracker-db-sqlite.c (original) +++ trunk/src/trackerd/tracker-db-sqlite.c Thu Feb 14 18:11:28 2008 @@ -1846,13 +1846,11 @@ char *** tracker_exec_proc (DBConnection *db_con, const char *procedure, int param_count, ...) { + GPtrArray *res; va_list args; - int i, busy_count, cols, row; + int i, busy_count, cols; sqlite3_stmt *stmt; - char **res; - GSList *result; int rc; - const GSList *tmp; stmt = get_prepared_query (db_con, procedure); @@ -1883,12 +1881,10 @@ va_end (args); cols = sqlite3_column_count (stmt); + res = g_ptr_array_sized_new (100); busy_count = 0; - row = 0; - result = NULL; - lock_connection (db_con); while (TRUE) { @@ -1906,10 +1902,7 @@ unlock_db (); db_con->in_error = TRUE; break; - } - - - if (rc == SQLITE_BUSY) { + } else if (rc == SQLITE_BUSY) { unlock_db (); unlock_connection (db_con); busy_count++; @@ -1926,14 +1919,10 @@ } lock_connection (db_con); - continue; - } - - if (rc == SQLITE_ROW) { + } else if (rc == SQLITE_ROW) { char **new_row; new_row = g_new0 (char *, cols+1); - new_row[cols] = NULL; unlock_db (); @@ -1951,16 +1940,15 @@ } } - if (new_row && new_row[0]) { - result = g_slist_prepend (result, new_row); - row++; + if (new_row[0]) { + g_ptr_array_add (res, new_row); + } else { + g_strfreev (new_row); } - - continue; + } else { + unlock_db (); + break; } - - unlock_db (); - break; } unlock_connection (db_con); @@ -1982,29 +1970,13 @@ } - if (!result || (row == 0)) { + if (res->len == 0) { return NULL; } - result = g_slist_reverse (result); - - res = g_new0 (char *, row+1); - res[row] = NULL; - - tmp = result; - - for (i = 0; i < row; i++) { - if (tmp) { - res[i] = tmp->data; - tmp = tmp->next; - } else { - tracker_error ("WARNING: exec proc has a dud entry"); - } - } - - g_slist_free (result); + g_ptr_array_add (res, NULL); - return (char ***) res; + return (char ***) g_ptr_array_free (res, FALSE); } _______________________________________________ SVN-commits-list mailing list (read only) http://mail.gnome.org/mailman/listinfo/svn-commits-list Want to limit the commits to a few modules? Go to above URL, log in to edit your options and select the modules ('topics') you want. Module maintainer? It is possible to set the reply-to to your development mailing list. Email [EMAIL PROTECTED] if interested.