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.

Reply via email to