tracker r1128 - in trunk: . src/trackerd
- From: carlosg svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1128 - in trunk: . src/trackerd
- Date: Thu, 14 Feb 2008 18:11:29 +0000 (GMT)
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 <carlos imendio com>
* 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);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]