tracker r1373 - in branches/indexer-split: . src/libtracker-db src/trackerd



Author: pvanhoof
Date: Thu May  8 12:07:40 2008
New Revision: 1373
URL: http://svn.gnome.org/viewvc/tracker?rev=1373&view=rev

Log:
2008-05-08  Philip Van Hoof  <pvanhoof gnome org>
	* src/trackerd/tracker-db-sqlite.c:
	* src/libtracker-db/tracker-db-interface.h:
	* src/libtracker-db/tracker-db-interface-sqlite.c:
	* src/libtracker-db/tracker-db-interface.c: Improvement for void returning
	queries



Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/libtracker-db/tracker-db-interface-sqlite.c
   branches/indexer-split/src/libtracker-db/tracker-db-interface.c
   branches/indexer-split/src/libtracker-db/tracker-db-interface.h
   branches/indexer-split/src/trackerd/tracker-db-sqlite.c

Modified: branches/indexer-split/src/libtracker-db/tracker-db-interface-sqlite.c
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-interface-sqlite.c	(original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-interface-sqlite.c	Thu May  8 12:07:40 2008
@@ -48,6 +48,7 @@
 	sqlite3_stmt *stmt;
 	GError **error;
 	TrackerDBResultSet *retval;
+	gboolean nowait;
 
 	GCond* condition;
 	gboolean had_callback;
@@ -56,6 +57,7 @@
 
 static void tracker_db_interface_sqlite_iface_init (TrackerDBInterfaceIface *iface);
 static void process_query (gpointer data, gpointer user_data);
+static void free_db_query_task (TrackerDBQueryTask *task);
 
 enum {
 	PROP_0,
@@ -457,20 +459,27 @@
 	task->retval = create_result_set_from_stmt (TRACKER_DB_INTERFACE_SQLITE (user_data), 
 		task->stmt, task->error);
 
-	g_mutex_lock (task->mutex);
-	g_cond_broadcast (task->condition);
-	task->had_callback = TRUE;
-	g_mutex_unlock (task->mutex);
+	if (!task->nowait) {
+		g_mutex_lock (task->mutex);
+		g_cond_broadcast (task->condition);
+		task->had_callback = TRUE;
+		g_mutex_unlock (task->mutex);
+	} else {
+		if (task->retval)
+			g_object_unref (task->retval);
+		free_db_query_task (task);
+	}
 }
 
 static TrackerDBQueryTask*
-create_db_query_task (sqlite3_stmt *stmt, GError **error)
+create_db_query_task (sqlite3_stmt *stmt, GError **error, gboolean nowait)
 {
 	TrackerDBQueryTask *task = g_slice_new (TrackerDBQueryTask);
 
 	task->mutex = g_mutex_new ();
 	task->condition = g_cond_new ();
 	task->had_callback = FALSE;
+	task->nowait = nowait;
 
 	task->stmt = stmt;
 	task->error = error;
@@ -522,7 +531,7 @@
 	/* Just panic if the number of arguments don't match */
 	g_assert (n_args != stmt_args);
 
-	task = create_db_query_task (stmt, error);
+	task = create_db_query_task (stmt, error, FALSE);
 	g_thread_pool_push (priv->pool, task, NULL);
 	wait_for_db_query_task (task);
 	retval = task->retval;
@@ -531,6 +540,40 @@
 	return retval;
 }
 
+
+
+static void
+tracker_db_interface_sqlite_execute_procedure_no_reply (TrackerDBInterface  *db_interface,
+							GError             **error,
+							const gchar         *procedure_name,
+							va_list              args)
+{
+	TrackerDBInterfaceSqlitePrivate *priv;
+	sqlite3_stmt *stmt;
+	gint stmt_args, n_args;
+	gchar *str;
+	TrackerDBQueryTask *task;
+
+	priv = TRACKER_DB_INTERFACE_SQLITE_GET_PRIVATE (db_interface);
+	stmt = get_stored_stmt (TRACKER_DB_INTERFACE_SQLITE (db_interface), procedure_name);
+	stmt_args = sqlite3_bind_parameter_count (stmt);
+	n_args = 1;
+
+	while ((str = va_arg (args, gchar *)) != NULL) {
+		sqlite3_bind_text (stmt, n_args, str, -1, SQLITE_STATIC);
+		n_args++;
+	}
+
+	/* Just panic if the number of arguments don't match */
+	g_assert (n_args != stmt_args);
+
+	task = create_db_query_task (stmt, error, TRUE);
+	g_thread_pool_push (priv->pool, task, NULL);
+
+	return;
+}
+
+
 static TrackerDBResultSet *
 tracker_db_interface_sqlite_execute_procedure_len (TrackerDBInterface  *db_interface,
 						   GError             **error,
@@ -566,7 +609,7 @@
 	/* Just panic if the number of arguments don't match */
 	g_assert (n_args != stmt_args);
 
-	task = create_db_query_task (stmt, error);
+	task = create_db_query_task (stmt, error, FALSE);
 	g_thread_pool_push (priv->pool, task, NULL);
 	wait_for_db_query_task (task);
 	retval = task->retval;
@@ -597,7 +640,7 @@
 		return NULL;
 	}
 
-	task = create_db_query_task (stmt, error);
+	task = create_db_query_task (stmt, error, FALSE);
 	g_thread_pool_push (priv->pool, task, NULL);
 	wait_for_db_query_task (task);
 	retval = task->retval;
@@ -616,6 +659,7 @@
 {
 	iface->set_procedure_table = tracker_db_interface_sqlite_set_procedure_table;
 	iface->execute_procedure = tracker_db_interface_sqlite_execute_procedure;
+	iface->execute_procedure_no_reply = tracker_db_interface_sqlite_execute_procedure_no_reply;
 	iface->execute_procedure_len = tracker_db_interface_sqlite_execute_procedure_len;
 	iface->execute_query = tracker_db_interface_sqlite_execute_query;
 }

Modified: branches/indexer-split/src/libtracker-db/tracker-db-interface.c
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-interface.c	(original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-interface.c	Thu May  8 12:07:40 2008
@@ -306,6 +306,25 @@
 	return ensure_result_set_state (result_set);
 }
 
+
+void
+tracker_db_interface_execute_vprocedure_no_reply (TrackerDBInterface  *interface,
+						  GError             **error,
+						  const gchar         *procedure,
+						  va_list              args)
+{
+	g_return_if_fail (TRACKER_IS_DB_INTERFACE (interface));
+	g_return_if_fail (procedure != NULL);
+
+	if (!TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_procedure_no_reply) {
+		g_critical ("Database abstraction %s doesn't implement the method execute_procedure()", G_OBJECT_TYPE_NAME (interface));
+		return;
+	}
+
+	TRACKER_DB_INTERFACE_GET_IFACE (interface)->execute_procedure_no_reply (interface, error, procedure, args);
+}
+
+
 TrackerDBResultSet *
 tracker_db_interface_execute_vprocedure_len (TrackerDBInterface  *interface,
 					     GError             **error,

Modified: branches/indexer-split/src/libtracker-db/tracker-db-interface.h
==============================================================================
--- branches/indexer-split/src/libtracker-db/tracker-db-interface.h	(original)
+++ branches/indexer-split/src/libtracker-db/tracker-db-interface.h	Thu May  8 12:07:40 2008
@@ -59,6 +59,11 @@
 							GError             **error,
 							const gchar         *procedure,
 							va_list              args);
+	void                 (* execute_procedure_no_reply) 
+							(TrackerDBInterface  *interface,
+							GError             **error,
+							const gchar         *procedure,
+							va_list              args);
 	TrackerDBResultSet * (* execute_procedure_len) (TrackerDBInterface  *interface,
 							GError             **error,
 							const gchar         *procedure,
@@ -99,6 +104,11 @@
 								  GError             **error,
 								  const gchar          *procedure,
 								  va_list               args);
+void                    tracker_db_interface_execute_vprocedure_no_reply
+								  (TrackerDBInterface   *interface,
+								  GError             **error,
+								  const gchar          *procedure,
+								  va_list               args);
 TrackerDBResultSet *    tracker_db_interface_execute_procedure   (TrackerDBInterface   *interface,
 								  GError             **error,
 								  const gchar          *procedure,

Modified: branches/indexer-split/src/trackerd/tracker-db-sqlite.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db-sqlite.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-db-sqlite.c	Thu May  8 12:07:40 2008
@@ -1316,13 +1316,9 @@
 	va_list args;
 
 	va_start (args, procedure);
-	result_set = tracker_db_interface_execute_vprocedure (db_con->db, NULL, procedure, args);
+	tracker_db_interface_execute_vprocedure_no_reply (db_con->db, NULL, procedure, args);
 	va_end (args);
 
-	if (result_set) {
-		g_object_unref (result_set);
-	}
-
 	return TRUE;
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]