summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libtracker-sparql/direct/tracker-direct.c45
1 files changed, 27 insertions, 18 deletions
diff --git a/src/libtracker-sparql/direct/tracker-direct.c b/src/libtracker-sparql/direct/tracker-direct.c
index ff4642a9a..7f5131deb 100644
--- a/src/libtracker-sparql/direct/tracker-direct.c
+++ b/src/libtracker-sparql/direct/tracker-direct.c
@@ -848,6 +848,26 @@ tracker_direct_connection_update_finish (TrackerSparqlConnection *self,
}
static void
+on_batch_finished (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TrackerBatch *batch = TRACKER_BATCH (source);
+ GTask *task = user_data;
+ GError *error = NULL;
+ gboolean retval;
+
+ retval = tracker_batch_execute_finish (batch, result, &error);
+
+ if (retval)
+ g_task_return_boolean (task, TRUE);
+ else
+ g_task_return_error (task, error);
+
+ g_object_unref (task);
+}
+
+static void
tracker_direct_connection_update_array_async (TrackerSparqlConnection *self,
gchar **updates,
gint n_updates,
@@ -855,29 +875,18 @@ tracker_direct_connection_update_array_async (TrackerSparqlConnection *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
- TrackerDirectConnectionPrivate *priv;
- TrackerDirectConnection *conn;
- TaskData *task_data;
+ TrackerBatch *batch;
GTask *task;
- gchar *concatenated;
- gchar **array_copy;
-
- conn = TRACKER_DIRECT_CONNECTION (self);
- priv = tracker_direct_connection_get_instance_private (conn);
+ gint i;
- /* Make a NULL-terminated array and concatenate it */
- array_copy = g_new0 (gchar *, n_updates + 1);
- memcpy (array_copy, updates, n_updates * sizeof (gchar *));
- concatenated = g_strjoinv ("\n", array_copy);
- g_free (array_copy);
+ batch = tracker_sparql_connection_create_batch (self);
- task_data = task_data_query_new (TASK_TYPE_UPDATE, concatenated, g_free);
+ for (i = 0; i < n_updates; i++)
+ tracker_batch_add_sparql (batch, updates[i]);
task = g_task_new (self, cancellable, callback, user_data);
- g_task_set_task_data (task, task_data,
- (GDestroyNotify) task_data_free);
-
- g_thread_pool_push (priv->update_thread, task, NULL);
+ tracker_batch_execute_async (batch, cancellable, on_batch_finished, task);
+ g_object_unref (batch);
}
static gboolean