diff options
-rw-r--r-- | src/libtracker-sparql/bus/tracker-bus.vala | 3 | ||||
-rw-r--r-- | src/libtracker-sparql/tracker-connection.c | 2 | ||||
-rw-r--r-- | tests/libtracker-sparql/tracker-fd-test.c | 46 |
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 (); } |