summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libtracker-sparql/bus/tracker-bus.vala3
-rw-r--r--src/libtracker-sparql/tracker-connection.c2
-rw-r--r--tests/libtracker-sparql/tracker-fd-test.c46
3 files changed, 50 insertions, 1 deletions
diff --git a/src/libtracker-sparql/bus/tracker-bus.vala b/src/libtracker-sparql/bus/tracker-bus.vala
index 985d3f684..a09ad6b9c 100644
--- a/src/libtracker-sparql/bus/tracker-bus.vala
+++ b/src/libtracker-sparql/bus/tracker-bus.vala
@@ -239,6 +239,9 @@ public class Tracker.Bus.Connection : Tracker.Sparql.Connection {
}
public async override bool update_array_async (string[] sparql, Cancellable? cancellable = null) throws Sparql.Error, GLib.Error, GLib.IOError, DBusError {
+ if (sparql.length == 0)
+ return true;
+
UnixInputStream input;
UnixOutputStream output;
pipe (out input, out output);
diff --git a/src/libtracker-sparql/tracker-connection.c b/src/libtracker-sparql/tracker-connection.c
index 2cacd7735..d21bce3e2 100644
--- a/src/libtracker-sparql/tracker-connection.c
+++ b/src/libtracker-sparql/tracker-connection.c
@@ -429,7 +429,7 @@ tracker_sparql_connection_update_array_async (TrackerSparqlConnection *connecti
gpointer user_data)
{
g_return_if_fail (TRACKER_IS_SPARQL_CONNECTION (connection));
- g_return_if_fail (sparql != NULL);
+ g_return_if_fail (sparql != NULL || sparql_length == 0);
g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
TRACKER_SPARQL_CONNECTION_GET_CLASS (connection)->update_array_async (connection,
diff --git a/tests/libtracker-sparql/tracker-fd-test.c b/tests/libtracker-sparql/tracker-fd-test.c
index 7b49990ea..2ba589d3a 100644
--- a/tests/libtracker-sparql/tracker-fd-test.c
+++ b/tests/libtracker-sparql/tracker-fd-test.c
@@ -377,6 +377,50 @@ test_tracker_sparql_update_array_async (DataFixture *fixture,
}
static void
+async_update_array_empty_callback (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GError *error = NULL;
+ AsyncData *data = user_data;
+
+ tracker_sparql_connection_update_array_finish (connection, result, &error);
+
+ /* main error is only set on fatal (D-Bus) errors that apply to the whole update */
+ g_assert_no_error (error);
+
+ g_main_loop_quit (data->main_loop);
+}
+
+static void
+test_tracker_sparql_update_array_async_empty (DataFixture *fixture,
+ gconstpointer user_data)
+{
+ const gchar **queries = NULL;
+ GMainLoop *main_loop;
+ AsyncData *data;
+
+ main_loop = g_main_loop_new (NULL, FALSE);
+
+ data = g_slice_new (AsyncData);
+ data->main_loop = main_loop;
+
+ /* Cast here is because vala doesn't make const-char-** possible :( */
+ tracker_sparql_connection_update_array_async (connection,
+ (char**) queries,
+ 0,
+ NULL,
+ async_update_array_empty_callback,
+ data);
+
+ g_main_loop_run (main_loop);
+
+ g_slice_free (AsyncData, data);
+ g_main_loop_unref (main_loop);
+
+}
+
+static void
test_tracker_sparql_update_fast_error (DataFixture *fixture,
gconstpointer user_data)
{
@@ -816,6 +860,8 @@ main (gint argc, gchar **argv)
test_tracker_sparql_update_blank_async, delete_test_data);
g_test_add ("/steroids/tracker/tracker_sparql_update_array_async", DataFixture, NULL, insert_test_data,
test_tracker_sparql_update_array_async, delete_test_data);
+ g_test_add ("/steroids/tracker/tracker_sparql_update_array_async_empty", DataFixture, NULL, insert_test_data,
+ test_tracker_sparql_update_array_async_empty, delete_test_data);
return g_test_run ();
}