tracker r1373 - in branches/indexer-split: . src/libtracker-db src/trackerd
- From: pvanhoof svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1373 - in branches/indexer-split: . src/libtracker-db src/trackerd
- Date: Thu, 8 May 2008 13:07:40 +0100 (BST)
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]