diff -Nru tracker-3.7.0/.gitlab-ci.yml tracker-3.7.1/.gitlab-ci.yml --- tracker-3.7.0/.gitlab-ci.yml 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/.gitlab-ci.yml 2024-03-27 16:51:14.000000000 +0000 @@ -112,7 +112,7 @@ .tracker.fedora@common: variables: - BASE_TAG: '2024-03-09.0' + BASE_TAG: '2024-03-24.3' FDO_DISTRIBUTION_PACKAGES: clang clang-analyzer @@ -120,7 +120,6 @@ diffutils gcovr git - gi-docgen libasan libsoup-devel libubsan @@ -142,7 +141,9 @@ dnf builddep -y tracker --setopt=install_weak_deps=False && # For tests, this isn't packaged in Fedora. pip3 install tap.py && - dnf clean all + dnf clean all && + # Prefer gi-docgen from the submodule + dnf remove -y gi-docgen --noautoremove .tracker.ubuntu@common: variables: diff -Nru tracker-3.7.0/NEWS tracker-3.7.1/NEWS --- tracker-3.7.0/NEWS 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/NEWS 2024-03-27 16:51:14.000000000 +0000 @@ -1,3 +1,10 @@ +NEW in 3.7.1 - 2024-03-27 +========================= + * Fix possible stalls in D-Bus endpoint batch updates + * Better API documentation around handling of corrupted + databases + * Test improvements + NEW in 3.7.0 - 2024-03-16 ========================= * Handle POST requests in HTTP endpoints diff -Nru tracker-3.7.0/debian/changelog tracker-3.7.1/debian/changelog --- tracker-3.7.0/debian/changelog 2024-03-20 13:31:32.000000000 +0000 +++ tracker-3.7.1/debian/changelog 2024-03-31 08:29:02.000000000 +0000 @@ -1,3 +1,15 @@ +tracker (3.7.1-1build1) noble; urgency=medium + + * No-change rebuild for CVE-2024-3094 + + -- Steve Langasek Sun, 31 Mar 2024 08:29:02 +0000 + +tracker (3.7.1-1) unstable; urgency=medium + + * New upstream release + + -- Jeremy Bícha Wed, 27 Mar 2024 18:43:13 -0400 + tracker (3.7.0-1) unstable; urgency=medium * New upstream release diff -Nru tracker-3.7.0/debian/control tracker-3.7.1/debian/control --- tracker-3.7.0/debian/control 2024-03-20 13:31:32.000000000 +0000 +++ tracker-3.7.1/debian/control 2024-03-31 08:29:01.000000000 +0000 @@ -1,7 +1,8 @@ Source: tracker Section: utils Priority: optional -Maintainer: Debian GNOME Maintainers +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Debian GNOME Maintainers Uploaders: Jeremy Bícha Build-Depends: debhelper-compat (= 13), dh-sequence-gir, diff -Nru tracker-3.7.0/meson.build tracker-3.7.1/meson.build --- tracker-3.7.0/meson.build 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/meson.build 2024-03-27 16:51:14.000000000 +0000 @@ -1,5 +1,5 @@ project('tracker', 'c', - version: '3.7.0', + version: '3.7.1', meson_version: '>=0.62', default_options: [ 'c_std=c99', diff -Nru tracker-3.7.0/src/libtracker-common/tracker-language.c tracker-3.7.1/src/libtracker-common/tracker-language.c --- tracker-3.7.0/src/libtracker-common/tracker-language.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-common/tracker-language.c 2024-03-27 16:51:14.000000000 +0000 @@ -49,10 +49,6 @@ static void language_constructed (GObject *object); static void language_finalize (GObject *object); -static void language_get_property (GObject *object, - guint param_id, - GValue *value, - GParamSpec *pspec); static void language_set_property (GObject *object, guint param_id, const GValue *value, @@ -67,7 +63,6 @@ object_class->constructed = language_constructed; object_class->finalize = language_finalize; - object_class->get_property = language_get_property; object_class->set_property = language_set_property; g_object_class_install_property (object_class, @@ -77,7 +72,7 @@ "Language code", NULL, G_PARAM_WRITABLE | - G_PARAM_CONSTRUCT_ONLY)); + G_PARAM_CONSTRUCT_ONLY)); } static void @@ -107,27 +102,6 @@ } static void -language_get_property (GObject *object, - guint param_id, - GValue *value, - GParamSpec *pspec) -{ - TrackerLanguagePrivate *priv; - - priv = tracker_language_get_instance_private (TRACKER_LANGUAGE (object)); - - switch (param_id) { - case PROP_LANGUAGE_CODE: - g_value_set_string (value, priv->language_code); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); - break; - }; -} - -static void language_set_property (GObject *object, guint param_id, const GValue *value, diff -Nru tracker-3.7.0/src/libtracker-sparql/bus/tracker-bus-batch.c tracker-3.7.1/src/libtracker-sparql/bus/tracker-bus-batch.c --- tracker-3.7.0/src/libtracker-sparql/bus/tracker-bus-batch.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/bus/tracker-bus-batch.c 2024-03-27 16:51:14.000000000 +0000 @@ -335,8 +335,7 @@ task = g_task_new (batch, cancellable, callback, user_data); conn = tracker_batch_get_connection (batch); tracker_bus_connection_perform_update_async (TRACKER_BUS_CONNECTION (conn), - (TrackerBusOp *) bus_batch->ops->data, - bus_batch->ops->len, + bus_batch->ops, cancellable, update_array_cb, task); diff -Nru tracker-3.7.0/src/libtracker-sparql/bus/tracker-bus-statement.c tracker-3.7.1/src/libtracker-sparql/bus/tracker-bus-statement.c --- tracker-3.7.0/src/libtracker-sparql/bus/tracker-bus-statement.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/bus/tracker-bus-statement.c 2024-03-27 16:51:14.000000000 +0000 @@ -302,6 +302,7 @@ GMainContext *context; UpdateAsyncData data = { 0, }; TrackerBusOp op = { 0, }; + GArray *ops; const gchar *sparql; conn = tracker_sparql_statement_get_connection (stmt); @@ -311,12 +312,14 @@ data.loop = g_main_loop_new (context, FALSE); g_main_context_push_thread_default (context); + ops = g_array_new (FALSE, FALSE, sizeof (TrackerBusOp)); op.type = TRACKER_BUS_OP_SPARQL; op.d.sparql.sparql = (gchar *) sparql; op.d.sparql.parameters = bus_stmt->arguments; + g_array_append_val (ops, op); tracker_bus_connection_perform_update_async (TRACKER_BUS_CONNECTION (conn), - &op, 1, + ops, cancellable, update_cb, &data); @@ -329,6 +332,8 @@ g_main_context_unref (context); + g_array_unref (ops); + if (data.error) { g_propagate_error (error, data.error); return FALSE; @@ -363,6 +368,7 @@ { TrackerBusStatement *bus_stmt = TRACKER_BUS_STATEMENT (stmt); TrackerSparqlConnection *conn; + GArray *ops; TrackerBusOp op = { 0, }; const gchar *sparql; GTask *task; @@ -372,15 +378,18 @@ task = g_task_new (stmt, cancellable, callback, user_data); + ops = g_array_new (FALSE, FALSE, sizeof (TrackerBusOp)); op.type = TRACKER_BUS_OP_SPARQL; op.d.sparql.sparql = (gchar *) sparql; op.d.sparql.parameters = bus_stmt->arguments; + g_array_append_val (ops, op); tracker_bus_connection_perform_update_async (TRACKER_BUS_CONNECTION (conn), - &op, 1, + ops, cancellable, update_async_cb, task); + g_array_unref (ops); } static gboolean diff -Nru tracker-3.7.0/src/libtracker-sparql/bus/tracker-bus.c tracker-3.7.1/src/libtracker-sparql/bus/tracker-bus.c --- tracker-3.7.0/src/libtracker-sparql/bus/tracker-bus.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/bus/tracker-bus.c 2024-03-27 16:51:14.000000000 +0000 @@ -75,6 +75,14 @@ } dbus, splice; } DeserializeTaskData; +typedef struct { + struct { + GError *error; + gboolean finished; + } dbus, write; + GVariant *retval; +} UpdateTaskData; + static void tracker_bus_connection_async_initable_iface_init (GAsyncInitableIface *iface); G_DEFINE_TYPE_WITH_CODE (TrackerBusConnection, tracker_bus_connection, @@ -218,31 +226,62 @@ return message; } -static gboolean -write_sparql_query (GOutputStream *ostream, - const gchar *query, - GError **error) +static void +write_sparql_query_in_thread (GTask *task, + gpointer source_object, + gpointer task_data, + GCancellable *cancellable) { + GOutputStream *ostream = source_object; GDataOutputStream *data; + const gchar *query; + GError *error = NULL; int len; + query = g_task_get_task_data (task); len = strlen (query); data = g_data_output_stream_new (ostream); g_data_output_stream_set_byte_order (data, G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN); - if (!g_data_output_stream_put_uint32 (data, TRACKER_BUS_OP_SPARQL, NULL, error)) + + if (!g_data_output_stream_put_uint32 (data, TRACKER_BUS_OP_SPARQL, cancellable, &error)) goto error; - if (!g_data_output_stream_put_int32 (data, len, NULL, error)) + if (!g_data_output_stream_put_int32 (data, len, cancellable, &error)) goto error; - if (!g_data_output_stream_put_string (data, query, NULL, error)) + if (!g_data_output_stream_put_string (data, query, cancellable, &error)) goto error; - if (!g_data_output_stream_put_int32 (data, 0, NULL, error)) + if (!g_data_output_stream_put_int32 (data, 0, cancellable, &error)) goto error; - g_object_unref (data); - return TRUE; error: + if (error) + g_task_return_error (task, error); + else + g_task_return_boolean (task, TRUE); + g_object_unref (data); - return FALSE; +} + +static void +write_sparql_query_async (GOutputStream *ostream, + const gchar *query, + GCancellable *cancellable, + GAsyncReadyCallback cb, + gpointer user_data) +{ + GTask *task; + + task = g_task_new (ostream, cancellable, cb, user_data); + g_task_set_task_data (task, g_strdup (query), g_free); + g_task_run_in_thread (task, write_sparql_query_in_thread); + g_object_unref (task); +} + +static gboolean +write_sparql_query_finish (GOutputStream *stream, + GAsyncResult *res, + GError **error) +{ + return g_task_propagate_boolean (G_TASK (res), error); } static GVariant * @@ -266,37 +305,41 @@ return g_variant_ref_sink (g_variant_builder_end (&builder)); } -static gboolean -write_sparql_queries (GOutputStream *ostream, - TrackerBusOp *ops, - gint n_ops, - GError **error) +static void +write_sparql_queries_in_thread (GTask *task, + gpointer source_object, + gpointer task_data, + GCancellable *cancellable) { + GOutputStream *ostream = source_object; + GArray *op_array; GDataOutputStream *data; GOutputStream *rdf_stream = NULL; GBytes *bytes = NULL; gchar *params_str = NULL; - int i; + GError *error = NULL; + guint i; + op_array = g_task_get_task_data (task); data = g_data_output_stream_new (ostream); g_data_output_stream_set_byte_order (data, G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN); - if (!g_data_output_stream_put_int32 (data, n_ops, NULL, error)) + if (!g_data_output_stream_put_int32 (data, op_array->len, cancellable, &error)) goto error; - for (i = 0; i < n_ops; i++) { - TrackerBusOp *op = &ops[i]; + for (i = 0; i < op_array->len; i++) { + TrackerBusOp *op = &g_array_index (op_array, TrackerBusOp, i); - if (!g_data_output_stream_put_int32 (data, op->type, NULL, error)) + if (!g_data_output_stream_put_int32 (data, op->type, cancellable, &error)) goto error; if (op->type == TRACKER_BUS_OP_SPARQL) { if (!g_data_output_stream_put_int32 (data, strlen (op->d.sparql.sparql), - NULL, error)) + cancellable, &error)) goto error; if (!g_data_output_stream_put_string (data, op->d.sparql.sparql, - NULL, error)) + cancellable, &error)) goto error; if (op->d.sparql.parameters) { @@ -308,33 +351,33 @@ if (!g_data_output_stream_put_int32 (data, strlen (params_str), - NULL, error)) + cancellable, &error)) goto error; if (!g_data_output_stream_put_string (data, params_str, - NULL, error)) + cancellable, &error)) goto error; g_clear_pointer (¶ms_str, g_free); } else { - if (!g_data_output_stream_put_int32 (data, 0, NULL, error)) + if (!g_data_output_stream_put_int32 (data, 0, cancellable, &error)) goto error; } } else if (op->type == TRACKER_BUS_OP_RDF) { - if (!g_data_output_stream_put_uint32 (data, op->d.rdf.flags, NULL, error)) + if (!g_data_output_stream_put_uint32 (data, op->d.rdf.flags, cancellable, &error)) goto error; - if (!g_data_output_stream_put_uint32 (data, op->d.rdf.format, NULL, error)) + if (!g_data_output_stream_put_uint32 (data, op->d.rdf.format, cancellable, &error)) goto error; if (op->d.rdf.default_graph) { if (!g_data_output_stream_put_int32 (data, strlen (op->d.rdf.default_graph), - NULL, error)) + cancellable, &error)) goto error; if (!g_data_output_stream_put_string (data, op->d.rdf.default_graph, - NULL, error)) + cancellable, &error)) goto error; } else { - if (!g_data_output_stream_put_int32 (data, 0, NULL, error)) + if (!g_data_output_stream_put_int32 (data, 0, cancellable, &error)) goto error; } @@ -343,36 +386,60 @@ op->d.rdf.stream, G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET, - NULL, - error) < 0) + cancellable, + &error) < 0) goto error; bytes = g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (rdf_stream)); g_clear_object (&rdf_stream); - if (!g_data_output_stream_put_uint32 (data, g_bytes_get_size (bytes), NULL, error)) + if (!g_data_output_stream_put_uint32 (data, g_bytes_get_size (bytes), cancellable, &error)) goto error; if (!g_output_stream_write_all (G_OUTPUT_STREAM (data), g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), NULL, - NULL, - error)) + cancellable, + &error)) goto error; g_clear_pointer (&bytes, g_bytes_unref); } } - g_output_stream_close (G_OUTPUT_STREAM (data), NULL, NULL); - g_object_unref (data); - return TRUE; error: g_clear_object (&rdf_stream); g_clear_pointer (&bytes, g_bytes_unref); g_clear_pointer (¶ms_str, g_free); g_object_unref (data); - return FALSE; + + if (error) + g_task_return_error (task, error); + else + g_task_return_boolean (task, TRUE); +} + +static void +write_sparql_queries_async (GOutputStream *ostream, + GArray *ops, + GCancellable *cancellable, + GAsyncReadyCallback cb, + gpointer user_data) +{ + GTask *task; + + task = g_task_new (ostream, cancellable, cb, user_data); + g_task_set_task_data (task, g_array_ref (ops), (GDestroyNotify) g_array_unref); + g_task_run_in_thread (task, write_sparql_queries_in_thread); + g_object_unref (task); +} + +static gboolean +write_sparql_queries_finish (GOutputStream *stream, + GAsyncResult *res, + GError **error) +{ + return g_task_propagate_boolean (G_TASK (res), error); } static void @@ -906,22 +973,67 @@ } static void +check_finish_update (GTask *task) +{ + UpdateTaskData *data; + + data = g_task_get_task_data (task); + + if (!data->dbus.finished || !data->write.finished) + return; + + if (data->dbus.error) { + g_dbus_error_strip_remote_error (data->dbus.error); + g_task_return_error (task, g_steal_pointer (&data->dbus.error)); + } else if (data->write.error) { + g_task_return_error (task, g_steal_pointer (&data->write.error)); + } else { + g_task_return_pointer (task, g_steal_pointer (&data->retval), + (GDestroyNotify) g_variant_unref); + } + + g_object_unref (task); +} + +static void update_cb (GObject *object, - GAsyncResult *res, - gpointer user_data) + GAsyncResult *res, + gpointer user_data) { GTask *task = user_data; - GError *error = NULL; - GVariant *retval; + UpdateTaskData *data; - retval = perform_update_finish (TRACKER_BUS_CONNECTION (object), - res, &error); - if (error) - g_task_return_error (task, error); - else - g_task_return_pointer (task, retval, (GDestroyNotify) g_variant_unref); + data = g_task_get_task_data (task); + data->retval = perform_update_finish (TRACKER_BUS_CONNECTION (object), + res, &data->dbus.error); + data->dbus.finished = TRUE; + check_finish_update (task); +} - g_object_unref (task); +static void +write_query_cb (GObject *object, + GAsyncResult *res, + gpointer user_data) +{ + GTask *task = user_data; + UpdateTaskData *data; + + data = g_task_get_task_data (task); + write_sparql_query_finish (G_OUTPUT_STREAM (object), + res, &data->write.error); + data->write.finished = TRUE; + check_finish_update (task); +} + +static void +update_task_data_free (gpointer data) +{ + UpdateTaskData *task_data = data; + + g_clear_error (&task_data->dbus.error); + g_clear_error (&task_data->write.error); + g_clear_pointer (&task_data->retval, g_variant_unref); + g_free (task_data); } static void @@ -931,6 +1043,7 @@ GAsyncReadyCallback callback, gpointer user_data) { + UpdateTaskData *data; GUnixFDList *fd_list; GOutputStream *ostream; GError *error = NULL; @@ -939,6 +1052,9 @@ task = g_task_new (self, cancellable, callback, user_data); + data = g_new0 (UpdateTaskData, 1); + g_task_set_task_data (task, data, update_task_data_free); + if (!create_pipe_for_write (&ostream, &fd_list, &fd_idx, &error)) { g_task_return_error (task, error); g_object_unref (task); @@ -946,14 +1062,15 @@ } perform_update_async (TRACKER_BUS_CONNECTION (self), - "Update", - fd_list, fd_idx, - cancellable, - update_cb, - task); + "Update", + fd_list, fd_idx, + cancellable, + update_cb, + task); - write_sparql_query (ostream, sparql, NULL); - g_output_stream_close (ostream, NULL, NULL); + write_sparql_query_async (ostream, sparql, + cancellable, + write_query_cb, task); g_object_unref (ostream); g_object_unref (fd_list); } @@ -977,23 +1094,25 @@ GAsyncReadyCallback callback, gpointer user_data) { - TrackerBusOp *ops; + GArray *ops; gint i; - ops = g_new0 (TrackerBusOp, n_updates); + ops = g_array_sized_new (FALSE, FALSE, sizeof (TrackerBusOp), n_updates); for (i = 0; i < n_updates; i++) { - ops[i].type = TRACKER_BUS_OP_SPARQL; - ops[i].d.sparql.sparql = updates[i]; + TrackerBusOp op = { 0, }; + + op.type = TRACKER_BUS_OP_SPARQL; + op.d.sparql.sparql = updates[i]; + g_array_append_val (ops, op); } tracker_bus_connection_perform_update_async (TRACKER_BUS_CONNECTION (self), ops, - n_updates, cancellable, callback, user_data); - g_free (ops); + g_array_unref (ops); } static gboolean @@ -1063,6 +1182,7 @@ GAsyncReadyCallback callback, gpointer user_data) { + UpdateTaskData *data; GUnixFDList *fd_list; GOutputStream *ostream; GError *error = NULL; @@ -1071,6 +1191,9 @@ task = g_task_new (self, cancellable, callback, user_data); + data = g_new0 (UpdateTaskData, 1); + g_task_set_task_data (task, data, update_task_data_free); + if (!create_pipe_for_write (&ostream, &fd_list, &fd_idx, &error)) { g_task_return_error (task, error); g_object_unref (task); @@ -1078,14 +1201,16 @@ } perform_update_async (TRACKER_BUS_CONNECTION (self), - "UpdateBlank", - fd_list, fd_idx, - cancellable, - update_cb, - task); + "UpdateBlank", + fd_list, fd_idx, + cancellable, + update_cb, + task); + + write_sparql_query_async (ostream, sparql, + cancellable, write_query_cb, + task); - write_sparql_query (ostream, sparql, NULL); - g_output_stream_close (ostream, NULL, NULL); g_object_unref (ostream); g_object_unref (fd_list); } @@ -1326,9 +1451,9 @@ if (data->dbus.error) { g_dbus_error_strip_remote_error (data->dbus.error); - g_task_return_error (task, data->dbus.error); + g_task_return_error (task, g_steal_pointer (&data->dbus.error)); } else if (data->splice.error) { - g_task_return_error (task, data->splice.error); + g_task_return_error (task, g_steal_pointer (&data->splice.error)); } else { g_task_return_boolean (task, TRUE); } @@ -1800,14 +1925,29 @@ return g_task_propagate_pointer (G_TASK (res), error); } +static void +write_queries_cb (GObject *object, + GAsyncResult *res, + gpointer user_data) +{ + GTask *task = user_data; + UpdateTaskData *data; + + data = g_task_get_task_data (task); + write_sparql_queries_finish (G_OUTPUT_STREAM (object), + res, &data->write.error); + data->write.finished = TRUE; + check_finish_update (task); +} + void tracker_bus_connection_perform_update_async (TrackerBusConnection *self, - TrackerBusOp *ops, - guint n_ops, + GArray *ops, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { + UpdateTaskData *data; GUnixFDList *fd_list; GOutputStream *ostream; GError *error = NULL; @@ -1816,12 +1956,15 @@ task = g_task_new (self, cancellable, callback, user_data); - if (n_ops == 0) { + if (ops->len == 0) { g_task_return_pointer (task, NULL, NULL); g_object_unref (task); return; } + data = g_new0 (UpdateTaskData, 1); + g_task_set_task_data (task, data, update_task_data_free); + if (!create_pipe_for_write (&ostream, &fd_list, &fd_idx, &error)) { g_task_return_error (task, error); g_object_unref (task); @@ -1835,8 +1978,10 @@ update_cb, task); - write_sparql_queries (ostream, ops, n_ops, NULL); - g_output_stream_close (ostream, NULL, NULL); + write_sparql_queries_async (ostream, ops, + cancellable, write_queries_cb, + task); + g_object_unref (ostream); g_object_unref (fd_list); } diff -Nru tracker-3.7.0/src/libtracker-sparql/bus/tracker-bus.h tracker-3.7.1/src/libtracker-sparql/bus/tracker-bus.h --- tracker-3.7.0/src/libtracker-sparql/bus/tracker-bus.h 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/bus/tracker-bus.h 2024-03-27 16:51:14.000000000 +0000 @@ -103,8 +103,7 @@ GError **error); void tracker_bus_connection_perform_update_async (TrackerBusConnection *self, - TrackerBusOp *ops, - guint n_ops, + GArray *ops, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); diff -Nru tracker-3.7.0/src/libtracker-sparql/core/tracker-data-manager.c tracker-3.7.1/src/libtracker-sparql/core/tracker-data-manager.c --- tracker-3.7.0/src/libtracker-sparql/core/tracker-data-manager.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/core/tracker-data-manager.c 2024-03-27 16:51:14.000000000 +0000 @@ -3850,15 +3850,12 @@ TrackerDataManager *data_manager) { GError *error = NULL; - guint flags; if (!tracker_data_manager_initialize_iface (data_manager, iface, &error)) { g_critical ("Could not set up interface : %s", error->message); g_error_free (error); } - - g_object_get (iface, "flags", &flags, NULL); } static gboolean diff -Nru tracker-3.7.0/src/libtracker-sparql/core/tracker-data-update.c tracker-3.7.1/src/libtracker-sparql/core/tracker-data-update.c --- tracker-3.7.0/src/libtracker-sparql/core/tracker-data-update.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/core/tracker-data-update.c 2024-03-27 16:51:14.000000000 +0000 @@ -648,24 +648,6 @@ } static void -tracker_data_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - TrackerData *data = TRACKER_DATA (object); - - switch (prop_id) { - case PROP_MANAGER: - g_value_set_object (value, data->manager); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void tracker_data_finalize (GObject *object) { TrackerData *data = TRACKER_DATA (object); @@ -694,7 +676,6 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = tracker_data_set_property; - object_class->get_property = tracker_data_get_property; object_class->finalize = tracker_data_finalize; g_object_class_install_property (object_class, @@ -703,7 +684,7 @@ "manager", "manager", TRACKER_TYPE_DATA_MANAGER, - G_PARAM_READWRITE | + G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); } diff -Nru tracker-3.7.0/src/libtracker-sparql/core/tracker-db-interface-sqlite.c tracker-3.7.1/src/libtracker-sparql/core/tracker-db-interface-sqlite.c --- tracker-3.7.0/src/libtracker-sparql/core/tracker-db-interface-sqlite.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/core/tracker-db-interface-sqlite.c 2024-03-27 16:51:14.000000000 +0000 @@ -178,6 +178,12 @@ g_free (message); } +#define TRACKER_RETURN_IF_FAIL(cond,fn,msg) \ + if (!((cond))) { \ + result_context_function_error (context, (fn), (msg)); \ + return; \ + } + static void function_sparql_string_join (sqlite3_context *context, int argc, @@ -186,24 +192,26 @@ const gchar *fn = "fn:string-join"; GString *str = NULL; const gchar *separator; + gsize len; gint i; /* fn:string-join (str1, str2, ..., separator) */ - if (sqlite3_value_type (argv[argc-1]) != SQLITE_TEXT) { - result_context_function_error (context, fn, "Invalid separator"); - return; - } + TRACKER_RETURN_IF_FAIL (argc >= 1, fn, "Invalid number of parameters"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_type (argv[argc - 1]) == SQLITE_TEXT, + fn, "Invalid separator"); separator = (gchar *)sqlite3_value_text (argv[argc-1]); - for (i = 0;i < argc-1; i++) { + str = g_string_new (""); + + for (i = 0; i < argc - 1; i++) { if (sqlite3_value_type (argv[argc-1]) == SQLITE_TEXT) { const gchar *text = (gchar *)sqlite3_value_text (argv[i]); if (text != NULL) { - if (!str) { - str = g_string_new (text); + if (str->len == 0) { + g_string_append (str, text); } else { g_string_append_printf (str, "%s%s", separator, text); } @@ -211,16 +219,10 @@ } } - if (str) { - gsize len = str->len; - sqlite3_result_text (context, - g_string_free (str, FALSE), - len, g_free); - } else { - sqlite3_result_null (context); - } - - return; + len = str->len; + sqlite3_result_text (context, + g_string_free (str, FALSE), + len, g_free); } /* Create a title-type string from the filename for replacing missing ones */ @@ -229,25 +231,16 @@ int argc, sqlite3_value *argv[]) { - const gchar *fn = "fn:string-from-filename"; + const gchar *fn = "tracker:string-from-filename"; gchar *name = NULL; gchar *suffix = NULL; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); /* "/home/user/path/title_of_the_movie.movie" -> "title of the movie" * Only for local files currently, do we need to change? */ name = g_filename_display_basename ((gchar *)sqlite3_value_text (argv[0])); - - if (!name) { - sqlite3_result_null (context); - return; - } - suffix = g_strrstr (name, "."); if (suffix) { @@ -269,10 +262,7 @@ gboolean match = FALSE; guint parent_len; - if (argc != 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 2, fn, "Invalid argument count"); parent = (gchar *)sqlite3_value_text (argv[0]); uri = (gchar *)sqlite3_value_text (argv[1]); @@ -384,19 +374,12 @@ /* fn:uri-is-descendant (parent1, parent2, ..., parentN, child) */ - if (argc < 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc >= 2, fn, "Invalid argument count"); for (i = 0; i < argc; i++) { - if (sqlite3_value_type (argv[i]) == SQLITE_NULL) { - sqlite3_result_int (context, FALSE); - return; - } else if (sqlite3_value_type (argv[i]) != SQLITE_TEXT) { - result_context_function_error (context, fn, "Invalid non-text argument"); - return; - } + TRACKER_RETURN_IF_FAIL (sqlite3_value_type (argv[i]) == SQLITE_TEXT || + sqlite3_value_type (argv[i]) == SQLITE_NULL, + fn, "Invalid non-text argument"); } child = (gchar *)sqlite3_value_text (argv[argc-1]); @@ -406,9 +389,6 @@ const gchar *parent = (gchar *)sqlite3_value_text (argv[i]); guint parent_len = sqlite3_value_bytes (argv[i]); - if (!parent) - continue; - match = check_uri_is_descendant (parent, parent_len, child); } } @@ -423,14 +403,14 @@ { const gchar *fn = "SparqlTimestamp helper"; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_type (argv[0]) == SQLITE_INTEGER || + sqlite3_value_type (argv[0]) == SQLITE_TEXT || + sqlite3_value_type (argv[0]) == SQLITE_NULL, + fn, "Invalid argument type"); if (sqlite3_value_type (argv[0]) == SQLITE_NULL) { sqlite3_result_null (context); - return; } else if (sqlite3_value_numeric_type (argv[0]) == SQLITE_INTEGER) { gdouble seconds; @@ -453,8 +433,6 @@ g_date_time_to_unix (datetime) + (g_date_time_get_utc_offset (datetime) / G_USEC_PER_SEC)); g_date_time_unref (datetime); - } else { - result_context_function_error (context, fn, "Invalid argument type"); } } @@ -464,12 +442,14 @@ sqlite3_value *argv[]) { const gchar *fn = "SparqlTimeSort helper"; - gint64 sort_key; + gint64 sort_key = 0; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_numeric_type (argv[0]) == SQLITE_INTEGER || + sqlite3_value_numeric_type (argv[0]) == SQLITE_FLOAT || + sqlite3_value_type (argv[0]) == SQLITE_TEXT || + sqlite3_value_type (argv[0]) == SQLITE_NULL, + fn, "Invalid argument type"); if (sqlite3_value_type (argv[0]) == SQLITE_NULL) { sqlite3_result_null (context); @@ -480,6 +460,7 @@ value = sqlite3_value_double (argv[0]); sort_key = (gint64) (value * G_USEC_PER_SEC); + sqlite3_result_int64 (context, sort_key); } else if (sqlite3_value_type (argv[0]) == SQLITE_TEXT) { GDateTime *datetime; const gchar *value; @@ -495,13 +476,9 @@ sort_key = ((g_date_time_to_unix (datetime) * G_USEC_PER_SEC) + g_date_time_get_microsecond (datetime)); + sqlite3_result_int64 (context, sort_key); g_date_time_unref (datetime); - } else { - result_context_function_error (context, fn, "Invalid argument type"); - return; } - - sqlite3_result_int64 (context, sort_key); } static void @@ -510,14 +487,15 @@ sqlite3_value *argv[]) { const gchar *fn = "timezone-from-dateTime"; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_numeric_type (argv[0]) == SQLITE_INTEGER || + sqlite3_value_type (argv[0]) == SQLITE_TEXT || + sqlite3_value_type (argv[0]) == SQLITE_NULL, + fn, "Invalid argument type"); if (sqlite3_value_type (argv[0]) == SQLITE_NULL) { sqlite3_result_null (context); - return; } else if (sqlite3_value_numeric_type (argv[0]) == SQLITE_INTEGER) { sqlite3_result_int (context, 0); } else if (sqlite3_value_type (argv[0]) == SQLITE_TEXT) { @@ -537,8 +515,6 @@ g_date_time_get_utc_offset (datetime) / G_USEC_PER_SEC); g_date_time_unref (datetime); - } else { - result_context_function_error (context, fn, "Invalid argument type"); } } @@ -547,14 +523,14 @@ int argc, sqlite3_value *argv[]) { - if (argc != 1) { - sqlite3_result_error (context, "Invalid argument count converting timezone to string", -1); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, "TZ", "Invalid argument count"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_numeric_type (argv[0]) == SQLITE_INTEGER || + sqlite3_value_type (argv[0]) == SQLITE_TEXT || + sqlite3_value_type (argv[0]) == SQLITE_NULL, + "TZ", "Invalid argument type"); if (sqlite3_value_type (argv[0]) == SQLITE_NULL) { sqlite3_result_null (context); - return; } else if (sqlite3_value_numeric_type (argv[0]) == SQLITE_INTEGER) { sqlite3_result_text (context, "", -1, NULL); } else if (sqlite3_value_type (argv[0]) == SQLITE_TEXT) { @@ -580,8 +556,6 @@ } else { sqlite3_result_text (context, "", -1, NULL); } - } else { - sqlite3_result_error (context, "Invalid argument type converting timezone to string", -1); } } @@ -618,14 +592,14 @@ { const gchar *fn = "SparqlTimezone helper"; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_numeric_type (argv[0]) == SQLITE_INTEGER || + sqlite3_value_type (argv[0]) == SQLITE_TEXT || + sqlite3_value_type (argv[0]) == SQLITE_NULL, + fn, "Invalid argument type"); if (sqlite3_value_type (argv[0]) == SQLITE_NULL) { sqlite3_result_null (context); - return; } else if (sqlite3_value_numeric_type (argv[0]) == SQLITE_INTEGER) { sqlite3_result_text (context, "PT0S", -1, NULL); } else if (sqlite3_value_type (argv[0]) == SQLITE_TEXT) { @@ -646,8 +620,6 @@ G_USEC_PER_SEC); sqlite3_result_text (context, g_strdup (duration), -1, g_free); g_date_time_unref (datetime); - } else { - result_context_function_error (context, fn, "Invalid argument type"); } } @@ -669,10 +641,7 @@ gdouble c; gdouble d; - if (argc != 4) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 4, fn, "Invalid argument count"); lat1 = sqlite3_value_double (argv[0])*M_PI/180; lat2 = sqlite3_value_double (argv[1])*M_PI/180; @@ -707,10 +676,7 @@ gdouble c; gdouble d; - if (argc != 4) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 4, fn, "Invalid argument count"); lat1 = sqlite3_value_double (argv[0])*M_PI/180; lat2 = sqlite3_value_double (argv[1])*M_PI/180; @@ -738,10 +704,7 @@ GRegexCompileFlags regex_flags; GRegex *regex; - if (argc != 2 && argc != 3) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 2 || argc == 3, fn, "Invalid argument count"); regex = sqlite3_get_auxdata (context, 1); @@ -823,23 +786,19 @@ TrackerDBInterface *db_interface = sqlite3_user_data (context); TrackerDBReplaceFuncChecks *checks = &db_interface->replace_func_checks; gboolean store_regex = FALSE, store_replace_regex = FALSE; - const gchar *input, *pattern, *replacement, *flags; + const gchar *input, *pattern, *replacement, *flags = ""; gchar *err_str, *output = NULL, *replaced = NULL, *unescaped = NULL; GError *error = NULL; GRegexCompileFlags regex_flags = 0; GRegex *regex, *replace_regex; gint capture_count, i; + TRACKER_RETURN_IF_FAIL (argc == 3 || argc == 4, fn, "Invalid argument count"); + ensure_replace_checks (db_interface); - if (argc == 3) { - flags = ""; - } else if (argc == 4) { + if (argc == 4) flags = (gchar *)sqlite3_value_text (argv[3]); - } else { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } input = (gchar *)sqlite3_value_text (argv[0]); regex = sqlite3_get_auxdata (context, 1); @@ -985,21 +944,17 @@ int nInput; gsize nOutput; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); zInput = sqlite3_value_text16 (argv[0]); - if (!zInput) { - return; + if (zInput) { + nInput = sqlite3_value_bytes16 (argv[0]); + zOutput = tracker_parser_tolower (zInput, nInput, &nOutput); + sqlite3_result_text16 (context, zOutput, -1, free); + } else { + sqlite3_result_null (context); } - - nInput = sqlite3_value_bytes16 (argv[0]); - - zOutput = tracker_parser_tolower (zInput, nInput, &nOutput); - sqlite3_result_text16 (context, zOutput, -1, free); } static void @@ -1013,21 +968,17 @@ int nInput; gsize nOutput; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); zInput = sqlite3_value_text16 (argv[0]); - if (!zInput) { - return; + if (zInput) { + nInput = sqlite3_value_bytes16 (argv[0]); + zOutput = tracker_parser_toupper (zInput, nInput, &nOutput); + sqlite3_result_text16 (context, zOutput, -1, free); + } else { + sqlite3_result_null (context); } - - nInput = sqlite3_value_bytes16 (argv[0]); - - zOutput = tracker_parser_toupper (zInput, nInput, &nOutput); - sqlite3_result_text16 (context, zOutput, -1, free); } static void @@ -1041,21 +992,17 @@ int nInput; gsize nOutput; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); zInput = sqlite3_value_text16 (argv[0]); - if (!zInput) { - return; + if (zInput) { + nInput = sqlite3_value_bytes16 (argv[0]); + zOutput = tracker_parser_casefold (zInput, nInput, &nOutput); + sqlite3_result_text16 (context, zOutput, -1, free); + } else { + sqlite3_result_null (context); } - - nInput = sqlite3_value_bytes16 (argv[0]); - - zOutput = tracker_parser_casefold (zInput, nInput, &nOutput); - sqlite3_result_text16 (context, zOutput, -1, free); } static void @@ -1071,14 +1018,12 @@ int nInput; gsize nOutput; - if (argc != 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 2, fn, "Invalid argument count"); zInput = sqlite3_value_text16 (argv[0]); if (!zInput) { + sqlite3_result_null (context); return; } @@ -1113,21 +1058,17 @@ int nInput; gsize nOutput; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); zInput = sqlite3_value_text16 (argv[0]); - if (!zInput) { - return; + if (zInput) { + nInput = sqlite3_value_bytes16 (argv[0]); + zOutput = tracker_parser_unaccent (zInput, nInput, &nOutput); + sqlite3_result_text16 (context, zOutput, nOutput * sizeof (gunichar2), free); + } else { + sqlite3_result_null (context); } - - nInput = sqlite3_value_bytes16 (argv[0]); - - zOutput = tracker_parser_unaccent (zInput, nInput, &nOutput); - sqlite3_result_text16 (context, zOutput, nOutput * sizeof (gunichar2), free); } static void @@ -1166,10 +1107,7 @@ const gchar *str; gchar *encoded; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); str = (gchar *)sqlite3_value_text (argv[0]); encoded = g_uri_escape_string (str, NULL, FALSE); @@ -1185,10 +1123,7 @@ const gchar *str; gchar *encoded; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); str = (gchar *)sqlite3_value_text (argv[0]); encoded = g_uri_escape_string (str, @@ -1206,16 +1141,10 @@ const gchar *str, *substr, *loc; gint len; - if (argc != 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } - - if (sqlite3_value_type (argv[0]) != SQLITE_TEXT || - sqlite3_value_type (argv[1]) != SQLITE_TEXT) { - result_context_function_error (context, fn, "Invalid argument types"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 2, fn, "Invalid argument count"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_type (argv[0]) == SQLITE_TEXT && + sqlite3_value_type (argv[1]) == SQLITE_TEXT, + fn, "Invalid argument types"); str = (gchar *)sqlite3_value_text (argv[0]); substr = (gchar *)sqlite3_value_text (argv[1]); @@ -1245,16 +1174,10 @@ const gchar *str, *substr, *loc; gint len; - if (argc != 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } - - if (sqlite3_value_type (argv[0]) != SQLITE_TEXT || - sqlite3_value_type (argv[1]) != SQLITE_TEXT) { - result_context_function_error (context, fn, "Invalid argument types"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 2, fn, "Invalid argument count"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_type (argv[0]) == SQLITE_TEXT && + sqlite3_value_type (argv[1]) == SQLITE_TEXT, + fn, "Invalid argument types"); str = (gchar *)sqlite3_value_text (argv[0]); substr = (gchar *)sqlite3_value_text (argv[1]); @@ -1283,10 +1206,7 @@ const gchar *fn = "fn:numeric-ceil"; gdouble value; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); value = sqlite3_value_double (argv[0]); sqlite3_result_double (context, ceil (value)); @@ -1300,10 +1220,7 @@ const gchar *fn = "fn:numeric-floor"; gdouble value; - if (argc != 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1, fn, "Invalid argument count"); value = sqlite3_value_double (argv[0]); sqlite3_result_double (context, floor (value)); @@ -1318,10 +1235,7 @@ TrackerPropertyType prop_type; const gchar *type = NULL; - if (argc < 1 || argc > 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 1 || argc == 2, fn, "Invalid argument count"); prop_type = sqlite3_value_int (argv[0]); @@ -1368,10 +1282,7 @@ { const gchar *fn = "rand"; - if (argc != 0) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 0, fn, "Invalid argument count"); sqlite3_result_double (context, g_random_double ()); } @@ -1386,18 +1297,13 @@ GChecksumType checksum; gchar *result; - if (argc != 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 2, fn, "Invalid argument count"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_type (argv[0]) == SQLITE_TEXT && + sqlite3_value_type (argv[1]) == SQLITE_TEXT, + fn, "Invalid argument types"); - str = (gchar *)sqlite3_value_text (argv[0]); - checksumstr = (gchar *)sqlite3_value_text (argv[1]); - - if (!str || !checksumstr) { - result_context_function_error (context, fn, "Invalid arguments"); - return; - } + str = (const gchar *) sqlite3_value_text (argv[0]); + checksumstr = (const gchar *) sqlite3_value_text (argv[1]); if (g_ascii_strcasecmp (checksumstr, "md5") == 0) checksum = G_CHECKSUM_MD5; @@ -1429,10 +1335,11 @@ const gchar *str, *langtag; gint type; - if (argc != 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 2, fn, "Invalid argument count"); + TRACKER_RETURN_IF_FAIL (sqlite3_value_type (argv[0]) == SQLITE_TEXT || + sqlite3_value_type (argv[0]) == SQLITE_BLOB || + sqlite3_value_type (argv[0]) == SQLITE_NULL, + fn, "Invalid argument type"); type = sqlite3_value_type (argv[0]); @@ -1470,10 +1377,7 @@ gpointer data; gsize len; - if (argc != 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc == 2, fn, "Invalid argument count"); str = sqlite3_value_text (argv[0]); langtag = sqlite3_value_text (argv[1]); @@ -1571,10 +1475,7 @@ const gchar *fn = "SparqlUUID helper"; const gchar *prefix; - if (argc > 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc <= 1, fn, "Invalid argument count"); prefix = sqlite3_value_text (argv[0]); generate_uuid (context, fn, prefix); @@ -1587,10 +1488,7 @@ { const gchar *fn = "SparlBNODE helper"; - if (argc > 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc <= 1, fn, "Invalid argument count"); generate_uuid (context, fn, "urn:bnode"); } @@ -1603,10 +1501,7 @@ const gchar *fn = "PrintValue helper"; TrackerPropertyType prop_type; - if (argc > 2) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc <= 2, fn, "Invalid argument count"); if (sqlite3_value_type (argv[0]) == SQLITE_NULL) { sqlite3_result_null (context); @@ -1723,10 +1618,7 @@ int len; gchar *result; - if (argc > 1) { - result_context_function_error (context, fn, "Invalid argument count"); - return; - } + TRACKER_RETURN_IF_FAIL (argc <= 1, fn, "Invalid argument count"); text = g_strstrip (g_strdup (sqlite3_value_text (argv[0]))); str = g_string_new (NULL); @@ -1992,31 +1884,6 @@ } static void -tracker_db_interface_sqlite_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - TrackerDBInterface *db_iface; - - db_iface = TRACKER_DB_INTERFACE (object); - - switch (prop_id) { - case PROP_FLAGS: - g_value_set_flags (value, db_iface->flags); - break; - case PROP_FILENAME: - g_value_set_string (value, db_iface->filename); - break; - case PROP_SHARED_CACHE_KEY: - g_value_set_string (value, db_iface->shared_cache_key); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void close_database (TrackerDBInterface *db_interface) { gint rc; @@ -2282,7 +2149,6 @@ GObjectClass *object_class = G_OBJECT_CLASS (class); object_class->set_property = tracker_db_interface_sqlite_set_property; - object_class->get_property = tracker_db_interface_sqlite_get_property; object_class->finalize = tracker_db_interface_sqlite_finalize; g_object_class_install_property (object_class, @@ -2291,7 +2157,7 @@ "DB filename", "DB filename", NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_FLAGS, @@ -2299,7 +2165,7 @@ "Flags", "Interface flags", TRACKER_TYPE_DB_INTERFACE_FLAGS, 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_SHARED_CACHE_KEY, @@ -2307,7 +2173,7 @@ "Shared cache key", "Shared cache key", NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); } static void @@ -2860,23 +2726,6 @@ } static void -tracker_db_cursor_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - TrackerSparqlCursor *cursor = TRACKER_SPARQL_CURSOR (object); - - switch (prop_id) { - case TRACKER_DB_CURSOR_PROP_N_COLUMNS: - g_value_set_int (value, tracker_db_cursor_get_n_columns (cursor)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void tracker_db_cursor_iter_next_thread (GTask *task, gpointer object, gpointer task_data, @@ -2924,7 +2773,6 @@ TrackerSparqlCursorClass *sparql_cursor_class = TRACKER_SPARQL_CURSOR_CLASS (class); object_class->finalize = tracker_db_cursor_finalize; - object_class->get_property = tracker_db_cursor_get_property; sparql_cursor_class->get_value_type = tracker_db_cursor_get_value_type; sparql_cursor_class->get_variable_name = tracker_db_cursor_get_variable_name; @@ -2939,8 +2787,6 @@ sparql_cursor_class->get_integer = tracker_db_cursor_get_int; sparql_cursor_class->get_double = tracker_db_cursor_get_double; sparql_cursor_class->get_boolean = tracker_db_cursor_get_boolean; - - g_object_class_override_property (object_class, TRACKER_DB_CURSOR_PROP_N_COLUMNS, "n-columns"); } static TrackerDBCursor * diff -Nru tracker-3.7.0/src/libtracker-sparql/core/tracker-sparql.c tracker-3.7.1/src/libtracker-sparql/core/tracker-sparql.c --- tracker-3.7.0/src/libtracker-sparql/core/tracker-sparql.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/core/tracker-sparql.c 2024-03-27 16:51:14.000000000 +0000 @@ -8043,6 +8043,9 @@ tracker_sparql_swap_current_expression_list_separator (sparql, old_sep); sparql->current_state->expression_type = TRACKER_PROPERTY_TYPE_STRING; } else if (g_str_equal (function, FN_NS "string-join")) { + TrackerStringBuilder *str, *old; + gboolean has_args; + sparql->current_state->convert_to_string = TRUE; _append_string (sparql, "SparqlStringJoin ("); _step (sparql); @@ -8051,10 +8054,15 @@ if (!_check_in_rule (sparql, NAMED_RULE_ArgList)) _raise (PARSE, "List of strings to join must be surrounded by parentheses", "fn:string-join"); + str = _append_placeholder (sparql); + old = tracker_sparql_swap_builder (sparql, str); _call_rule (sparql, NAMED_RULE_ArgList, error); + has_args = !tracker_string_builder_is_empty (str); + tracker_sparql_swap_builder (sparql, old); while (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_COMMA)) { - _append_string (sparql, ", "); + if (has_args) + _append_string (sparql, ", "); _call_rule (sparql, NAMED_RULE_Expression, error); } diff -Nru tracker-3.7.0/src/libtracker-sparql/direct/tracker-direct-batch.c tracker-3.7.1/src/libtracker-sparql/direct/tracker-direct-batch.c --- tracker-3.7.0/src/libtracker-sparql/direct/tracker-direct-batch.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/direct/tracker-direct-batch.c 2024-03-27 16:51:14.000000000 +0000 @@ -282,6 +282,8 @@ } else if (elem->type == TRACKER_DIRECT_BATCH_RDF) { g_free (elem->d.rdf.default_graph); g_clear_object (&elem->d.rdf.stream); + } else if (elem->type == TRACKER_DIRECT_BATCH_DBUS_FD) { + g_clear_object (&elem->d.dbus_fd); } } diff -Nru tracker-3.7.0/src/libtracker-sparql/tracker-connection.c tracker-3.7.1/src/libtracker-sparql/tracker-connection.c --- tracker-3.7.0/src/libtracker-sparql/tracker-connection.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/tracker-connection.c 2024-03-27 16:51:14.000000000 +0000 @@ -1167,6 +1167,16 @@ * The database is always left in a consistent state, either prior or posterior * to migration. * + * Operations on a [class@Tracker.SparqlConnection] resulting on a + * [error@Tracker.SparqlError.CORRUPT] error will have the event recorded + * persistently through a `.meta.corrupted` file alongside the database files. + * If the database is opened without the [flags@Tracker.SparqlConnectionFlags.READONLY] + * flag and the file is found, this constructor will attempt to repair the + * database. In that situation, this constructor will either return a valid + * [class@Tracker.SparqlConnection] if the database was repaired successfully, or + * raise a [error@Tracker.SparqlError.CORRUPT] error if the database remains + * corrupted. + * * It is considered a developer error to ship ontologies that contain format * errors, or that fail at migrations. * diff -Nru tracker-3.7.0/src/libtracker-sparql/tracker-cursor.c tracker-3.7.1/src/libtracker-sparql/tracker-cursor.c --- tracker-3.7.0/src/libtracker-sparql/tracker-cursor.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/tracker-cursor.c 2024-03-27 16:51:14.000000000 +0000 @@ -61,7 +61,6 @@ typedef struct { TrackerSparqlConnection *connection; - gint n_columns; } TrackerSparqlCursorPrivate; G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (TrackerSparqlCursor, tracker_sparql_cursor, @@ -155,9 +154,6 @@ case PROP_CONNECTION: priv->connection = g_value_dup_object (value); break; - case PROP_N_COLUMNS: - priv->n_columns = g_value_get_int (value); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -177,7 +173,7 @@ g_value_set_object (value, priv->connection); break; case PROP_N_COLUMNS: - g_value_set_int (value, priv->n_columns); + g_value_set_int (value, tracker_sparql_cursor_get_n_columns (cursor)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); diff -Nru tracker-3.7.0/src/libtracker-sparql/tracker-error.h tracker-3.7.1/src/libtracker-sparql/tracker-error.h --- tracker-3.7.0/src/libtracker-sparql/tracker-error.h 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/src/libtracker-sparql/tracker-error.h 2024-03-27 16:51:14.000000000 +0000 @@ -45,6 +45,14 @@ * @TRACKER_SPARQL_ERROR_MISSING_LAST_MODIFIED_HEADER: The ontology doesn't contain nrl:lastModified header * @TRACKER_SPARQL_ERROR_INCOMPLETE_PROPERTY_DEFINITION: The property is not completely defined. * @TRACKER_SPARQL_ERROR_CORRUPT: A soft/hard corruption was found in the database during operation. + * If this error is obtained during regular operations with an existing [class@Tracker.SparqlConnection], + * the corruption was newly found. This event will be persistently recorded so that the + * [func@Tracker.SparqlConnection.new_async] constructor (or its synchronous variant) will + * perform database repair attempts. If this error is obtained during one of those constructors, the + * database could not be repaired automatically and data loss is unavoidable. It is left to the discretion + * of the API user to set up the appropriate fallbacks in this situation, to replace the + * database and recover from the error. See [ctor@Tracker.SparqlConnection.new] documentation + * for more information on corruption handling. * @TRACKER_SPARQL_ERROR_LAST: The total number of error codes. * * Error domain for Tracker Sparql. Errors in this domain will be from the diff -Nru tracker-3.7.0/tests/core/datetime/data-4.rq tracker-3.7.1/tests/core/datetime/data-4.rq --- tracker-3.7.0/tests/core/datetime/data-4.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/data-4.rq 2024-03-27 16:51:14.000000000 +0000 @@ -1,4 +1,8 @@ INSERT { example:x a example:A ; - example:p "0100-12-31T21:00:00-03:00" + example:p "0100-12-31T21:00:00-03:00" . + example:y a example:A ; + example:p "0100-12-31T21:00:00.123321-03:00" . + example:z a example:A ; + example:p "0100-12-31T21:00:00.123321Z" . } diff -Nru tracker-3.7.0/tests/core/datetime/data-5.ttl tracker-3.7.1/tests/core/datetime/data-5.ttl --- tracker-3.7.0/tests/core/datetime/data-5.ttl 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/data-5.ttl 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +@prefix : . +@prefix xsd: . + +:x a :A . +:x :p "2004-05-06T13:14:15-1234" . diff -Nru tracker-3.7.0/tests/core/datetime/functions-timezone-4.out tracker-3.7.1/tests/core/datetime/functions-timezone-4.out --- tracker-3.7.0/tests/core/datetime/functions-timezone-4.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-timezone-4.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/datetime/functions-timezone-4.rq tracker-3.7.1/tests/core/datetime/functions-timezone-4.rq --- tracker-3.7.0/tests/core/datetime/functions-timezone-4.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-timezone-4.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Handle unbound value +SELECT fn:timezone-from-dateTime (?v) +{ + VALUES ?x { 1 } +} diff -Nru tracker-3.7.0/tests/core/datetime/functions-timezone-5.out tracker-3.7.1/tests/core/datetime/functions-timezone-5.out --- tracker-3.7.0/tests/core/datetime/functions-timezone-5.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-timezone-5.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"-PT12H34M" diff -Nru tracker-3.7.0/tests/core/datetime/functions-timezone-5.rq tracker-3.7.1/tests/core/datetime/functions-timezone-5.rq --- tracker-3.7.0/tests/core/datetime/functions-timezone-5.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-timezone-5.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +SELECT TIMEZONE (?v) +WHERE { + example:x a example:A ; + example:p ?v +} diff -Nru tracker-3.7.0/tests/core/datetime/functions-timezone-6.out tracker-3.7.1/tests/core/datetime/functions-timezone-6.out --- tracker-3.7.0/tests/core/datetime/functions-timezone-6.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-timezone-6.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/datetime/functions-timezone-6.rq tracker-3.7.1/tests/core/datetime/functions-timezone-6.rq --- tracker-3.7.0/tests/core/datetime/functions-timezone-6.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-timezone-6.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Use unbound value +SELECT TIMEZONE(?v) +{ + VALUES ?x { 1 } +} \ No newline at end of file diff -Nru tracker-3.7.0/tests/core/datetime/functions-tz-2.out tracker-3.7.1/tests/core/datetime/functions-tz-2.out --- tracker-3.7.0/tests/core/datetime/functions-tz-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-tz-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"Z" diff -Nru tracker-3.7.0/tests/core/datetime/functions-tz-2.rq tracker-3.7.1/tests/core/datetime/functions-tz-2.rq --- tracker-3.7.0/tests/core/datetime/functions-tz-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-tz-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +SELECT TZ (?v) +WHERE { + example:x a example:A ; + example:p ?v +} diff -Nru tracker-3.7.0/tests/core/datetime/functions-tz-3.out tracker-3.7.1/tests/core/datetime/functions-tz-3.out --- tracker-3.7.0/tests/core/datetime/functions-tz-3.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-tz-3.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/datetime/functions-tz-3.rq tracker-3.7.1/tests/core/datetime/functions-tz-3.rq --- tracker-3.7.0/tests/core/datetime/functions-tz-3.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-tz-3.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Handle unbound value +SELECT TZ (?v) +{ + VALUES ?s { 1 } +} diff -Nru tracker-3.7.0/tests/core/datetime/functions-tz-4.out tracker-3.7.1/tests/core/datetime/functions-tz-4.out --- tracker-3.7.0/tests/core/datetime/functions-tz-4.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-tz-4.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"+0200" "+02:00" "" diff -Nru tracker-3.7.0/tests/core/datetime/functions-tz-4.rq tracker-3.7.1/tests/core/datetime/functions-tz-4.rq --- tracker-3.7.0/tests/core/datetime/functions-tz-4.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/functions-tz-4.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +SELECT + TZ("1234-12-12T12:12:12+0200") + TZ("1234-12-12T12:12:12+02:00") + TZ("1234-12-12T12:12:12.") +{ } diff -Nru tracker-3.7.0/tests/core/datetime/insert-1.out tracker-3.7.1/tests/core/datetime/insert-1.out --- tracker-3.7.0/tests/core/datetime/insert-1.out 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/insert-1.out 2024-03-27 16:51:14.000000000 +0000 @@ -1 +1,3 @@ "http://example/x" "0100-12-31T21:00:00-03:00" +"http://example/y" "0100-12-31T21:00:00.123321-03:00" +"http://example/z" "0100-12-31T21:00:00.123321Z" diff -Nru tracker-3.7.0/tests/core/datetime/insert-1.rq tracker-3.7.1/tests/core/datetime/insert-1.rq --- tracker-3.7.0/tests/core/datetime/insert-1.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/datetime/insert-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -2,3 +2,4 @@ WHERE { ?s example:p ?v } +ORDER BY ?x diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-lcase-2.out tracker-3.7.1/tests/core/functions/functions-builtin-lcase-2.out --- tracker-3.7.0/tests/core/functions/functions-builtin-lcase-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-lcase-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-lcase-2.rq tracker-3.7.1/tests/core/functions/functions-builtin-lcase-2.rq --- tracker-3.7.0/tests/core/functions/functions-builtin-lcase-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-lcase-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Use unbound value +SELECT (LCASE(?u) AS ?str1) +{ + VALUES ?x { 1 } +} diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-replace-6.out tracker-3.7.1/tests/core/functions/functions-builtin-replace-6.out --- tracker-3.7.0/tests/core/functions/functions-builtin-replace-6.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-replace-6.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +asdf \ No newline at end of file diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-replace-6.rq tracker-3.7.1/tests/core/functions/functions-builtin-replace-6.rq --- tracker-3.7.0/tests/core/functions/functions-builtin-replace-6.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-replace-6.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (REPLACE('abc', '(a.*c)', '$a') AS ?a) { } diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-strafter-2.out tracker-3.7.1/tests/core/functions/functions-builtin-strafter-2.out --- tracker-3.7.0/tests/core/functions/functions-builtin-strafter-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-strafter-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"" diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-strafter-2.rq tracker-3.7.1/tests/core/functions/functions-builtin-strafter-2.rq --- tracker-3.7.0/tests/core/functions/functions-builtin-strafter-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-strafter-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (STRAFTER('abcd', 'x') AS ?str) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-strafter-3.out tracker-3.7.1/tests/core/functions/functions-builtin-strafter-3.out --- tracker-3.7.0/tests/core/functions/functions-builtin-strafter-3.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-strafter-3.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"abcd" diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-strafter-3.rq tracker-3.7.1/tests/core/functions/functions-builtin-strafter-3.rq --- tracker-3.7.0/tests/core/functions/functions-builtin-strafter-3.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-strafter-3.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (STRAFTER('abcd', '') AS ?str) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-strbefore-2.out tracker-3.7.1/tests/core/functions/functions-builtin-strbefore-2.out --- tracker-3.7.0/tests/core/functions/functions-builtin-strbefore-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-strbefore-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"" diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-strbefore-2.rq tracker-3.7.1/tests/core/functions/functions-builtin-strbefore-2.rq --- tracker-3.7.0/tests/core/functions/functions-builtin-strbefore-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-strbefore-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (STRBEFORE('abcd', 'x') AS ?str) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-strbefore-3.out tracker-3.7.1/tests/core/functions/functions-builtin-strbefore-3.out --- tracker-3.7.0/tests/core/functions/functions-builtin-strbefore-3.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-strbefore-3.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"" diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-strbefore-3.rq tracker-3.7.1/tests/core/functions/functions-builtin-strbefore-3.rq --- tracker-3.7.0/tests/core/functions/functions-builtin-strbefore-3.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-strbefore-3.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (STRBEFORE('abcd', '') AS ?str) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-ucase-2.out tracker-3.7.1/tests/core/functions/functions-builtin-ucase-2.out --- tracker-3.7.0/tests/core/functions/functions-builtin-ucase-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-ucase-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-ucase-2.rq tracker-3.7.1/tests/core/functions/functions-builtin-ucase-2.rq --- tracker-3.7.0/tests/core/functions/functions-builtin-ucase-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-ucase-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Use unbound value +SELECT (UCASE(?u) AS ?str1) +{ + VALUES ?x { 1 } +} diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-year-2.out tracker-3.7.1/tests/core/functions/functions-builtin-year-2.out --- tracker-3.7.0/tests/core/functions/functions-builtin-year-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-year-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/functions/functions-builtin-year-2.rq tracker-3.7.1/tests/core/functions/functions-builtin-year-2.rq --- tracker-3.7.0/tests/core/functions/functions-builtin-year-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-builtin-year-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,4 @@ +# Match with unbound value +SELECT YEAR(?d) { + VALUES ?x { 1 } +} diff -Nru tracker-3.7.0/tests/core/functions/functions-datatypes-6.out tracker-3.7.1/tests/core/functions/functions-datatypes-6.out --- tracker-3.7.0/tests/core/functions/functions-datatypes-6.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-datatypes-6.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/functions/functions-datatypes-6.rq tracker-3.7.1/tests/core/functions/functions-datatypes-6.rq --- tracker-3.7.0/tests/core/functions/functions-datatypes-6.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-datatypes-6.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Access unbound value +SELECT DATATYPE(?v) +{ + VALUES ?x { 1 } +} diff -Nru tracker-3.7.0/tests/core/functions/functions-datatypes-7.out tracker-3.7.1/tests/core/functions/functions-datatypes-7.out --- tracker-3.7.0/tests/core/functions/functions-datatypes-7.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-datatypes-7.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"http://www.w3.org/2001/XMLSchema#integer" "http://www.w3.org/2001/XMLSchema#double" "http://www.w3.org/2001/XMLSchema#string" "http://www.w3.org/2001/XMLSchema#boolean" "http://www.w3.org/2001/XMLSchema#date" "http://www.w3.org/2001/XMLSchema#dateType" diff -Nru tracker-3.7.0/tests/core/functions/functions-datatypes-7.rq tracker-3.7.1/tests/core/functions/functions-datatypes-7.rq --- tracker-3.7.0/tests/core/functions/functions-datatypes-7.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-datatypes-7.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,9 @@ +SELECT + (DATATYPE(42) AS ?d1) + (DATATYPE(42.2) AS ?d2) + (DATATYPE("42.2") AS ?d3) + (DATATYPE(true) AS ?d4) + (DATATYPE("2024-01-01"^^xsd:date) AS ?d5) + (DATATYPE("2024-01-01T01:01:01Z"^^xsd:dateTime) AS ?d6) +{ +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-3.out tracker-3.7.1/tests/core/functions/functions-tracker-3.out --- tracker-3.7.0/tests/core/functions/functions-tracker-3.out 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-3.out 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -"true" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-3.rq tracker-3.7.1/tests/core/functions/functions-tracker-3.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-3.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-3.rq 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -SELECT ?eq { - BIND ((tracker:case-fold('AbCdEfGh') = tracker:case-fold('aBcDeFgH')) AS ?eq) -} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-5.out tracker-3.7.1/tests/core/functions/functions-tracker-5.out --- tracker-3.7.0/tests/core/functions/functions-tracker-5.out 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-5.out 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -"aeiou" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-5.rq tracker-3.7.1/tests/core/functions/functions-tracker-5.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-5.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-5.rq 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -SELECT (tracker:unaccent ('áêïoù') AS ?str) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-6.out tracker-3.7.1/tests/core/functions/functions-tracker-6.out --- tracker-3.7.0/tests/core/functions/functions-tracker-6.out 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-6.out 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -"true" "false" "false" "false" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-6.rq tracker-3.7.1/tests/core/functions/functions-tracker-6.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-6.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-6.rq 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -SELECT - (tracker:uri-is-parent ('file:///', 'file:///a') AS ?a) - (tracker:uri-is-parent ('file:///a', 'file:///b') AS ?b) - (tracker:uri-is-parent ('file:///a', 'file:///') AS ?c) - (tracker:uri-is-parent ('file:///', 'file:///a/b') AS ?d) -{ -} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-7.out tracker-3.7.1/tests/core/functions/functions-tracker-7.out --- tracker-3.7.0/tests/core/functions/functions-tracker-7.out 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-7.out 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -"true" "false" "false" "true" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-7.rq tracker-3.7.1/tests/core/functions/functions-tracker-7.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-7.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-7.rq 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -SELECT - (tracker:uri-is-descendant ('file:///', 'file:///a') AS ?a) - (tracker:uri-is-descendant ('file:///a', 'file:///b') AS ?b) - (tracker:uri-is-descendant ('file:///a', 'file:///') AS ?c) - (tracker:uri-is-descendant ('file:///', 'file:///a/b') AS ?d) -{ -} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-8.out tracker-3.7.1/tests/core/functions/functions-tracker-8.out --- tracker-3.7.0/tests/core/functions/functions-tracker-8.out 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-8.out 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -"true" "true" "true" "true" "true" "true" "true" "true" "true" "true" "true" "true" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-8.rq tracker-3.7.1/tests/core/functions/functions-tracker-8.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-8.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-8.rq 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -SELECT - ?nfd1 ?nfd2 ?nfd3 - ?nfc1 ?nfc2 ?nfc3 - ?nfkd1 ?nfkd2 ?nfkd3 - ?nfkc1 ?nfkc2 ?nfkc3 -{ - # From http://www.unicode.org/reports/tr15/#Compatibility_Composite_Figure - BIND ((tracker:normalize ('\ufb01', 'nfd') = '\ufb01') AS ?nfd1) . - BIND ((tracker:normalize ('\ufb01', 'nfc') = '\ufb01') AS ?nfc1) . - BIND ((tracker:normalize ('\ufb01', 'nfkd') = '\u0066\u0069') AS ?nfkd1) . - BIND ((tracker:normalize ('\ufb01', 'nfkc') = '\u0066\u0069') AS ?nfkc1) . - - BIND ((tracker:normalize ('\u0032\u2075', 'nfd') = '\u0032\u2075') AS ?nfd2) . - BIND ((tracker:normalize ('\u0032\u2075', 'nfc') = '\u0032\u2075') AS ?nfc2) . - BIND ((tracker:normalize ('\u0032\u2075', 'nfkd') = '\u0032\u0035') AS ?nfkd2) . - BIND ((tracker:normalize ('\u0032\u2075', 'nfkc') = '\u0032\u0035') AS ?nfkc2) . - - BIND ((tracker:normalize ('\u1e9b\u0323', 'nfd') = '\u017f\u0323\u0307') AS ?nfd3) . - BIND ((tracker:normalize ('\u1e9b\u0323', 'nfc') = '\u1e9b\u0323') AS ?nfc3) . - BIND ((tracker:normalize ('\u1e9b\u0323', 'nfkd') = '\u0073\u0323\u0307') AS ?nfkd3) . - BIND ((tracker:normalize ('\u1e9b\u0323', 'nfkc') = '\u1e69') AS ?nfkc3) . -} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-9.out tracker-3.7.1/tests/core/functions/functions-tracker-9.out --- tracker-3.7.0/tests/core/functions/functions-tracker-9.out 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-9.out 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -"hello World" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-9.rq tracker-3.7.1/tests/core/functions/functions-tracker-9.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-9.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-9.rq 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -SELECT (tracker:strip-punctuation ('hello, World!?') AS ?str) {} \ No newline at end of file diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-case-fold-1.out tracker-3.7.1/tests/core/functions/functions-tracker-case-fold-1.out --- tracker-3.7.0/tests/core/functions/functions-tracker-case-fold-1.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-case-fold-1.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"true" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-case-fold-1.rq tracker-3.7.1/tests/core/functions/functions-tracker-case-fold-1.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-case-fold-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-case-fold-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,3 @@ +SELECT ?eq { + BIND ((tracker:case-fold('AbCdEfGh') = tracker:case-fold('aBcDeFgH')) AS ?eq) +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-case-fold-2.out tracker-3.7.1/tests/core/functions/functions-tracker-case-fold-2.out --- tracker-3.7.0/tests/core/functions/functions-tracker-case-fold-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-case-fold-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-case-fold-2.rq tracker-3.7.1/tests/core/functions/functions-tracker-case-fold-2.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-case-fold-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-case-fold-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Use unbound value +SELECT (tracker:case-fold (?v) AS ?a) +{ + VALUES ?x { 1 } +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-normalize-1.out tracker-3.7.1/tests/core/functions/functions-tracker-normalize-1.out --- tracker-3.7.0/tests/core/functions/functions-tracker-normalize-1.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-normalize-1.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"true" "true" "true" "true" "true" "true" "true" "true" "true" "true" "true" "true" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-normalize-1.rq tracker-3.7.1/tests/core/functions/functions-tracker-normalize-1.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-normalize-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-normalize-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,22 @@ +SELECT + ?nfd1 ?nfd2 ?nfd3 + ?nfc1 ?nfc2 ?nfc3 + ?nfkd1 ?nfkd2 ?nfkd3 + ?nfkc1 ?nfkc2 ?nfkc3 +{ + # From http://www.unicode.org/reports/tr15/#Compatibility_Composite_Figure + BIND ((tracker:normalize ('\ufb01', 'nfd') = '\ufb01') AS ?nfd1) . + BIND ((tracker:normalize ('\ufb01', 'nfc') = '\ufb01') AS ?nfc1) . + BIND ((tracker:normalize ('\ufb01', 'nfkd') = '\u0066\u0069') AS ?nfkd1) . + BIND ((tracker:normalize ('\ufb01', 'nfkc') = '\u0066\u0069') AS ?nfkc1) . + + BIND ((tracker:normalize ('\u0032\u2075', 'nfd') = '\u0032\u2075') AS ?nfd2) . + BIND ((tracker:normalize ('\u0032\u2075', 'nfc') = '\u0032\u2075') AS ?nfc2) . + BIND ((tracker:normalize ('\u0032\u2075', 'nfkd') = '\u0032\u0035') AS ?nfkd2) . + BIND ((tracker:normalize ('\u0032\u2075', 'nfkc') = '\u0032\u0035') AS ?nfkc2) . + + BIND ((tracker:normalize ('\u1e9b\u0323', 'nfd') = '\u017f\u0323\u0307') AS ?nfd3) . + BIND ((tracker:normalize ('\u1e9b\u0323', 'nfc') = '\u1e9b\u0323') AS ?nfc3) . + BIND ((tracker:normalize ('\u1e9b\u0323', 'nfkd') = '\u0073\u0323\u0307') AS ?nfkd3) . + BIND ((tracker:normalize ('\u1e9b\u0323', 'nfkc') = '\u1e69') AS ?nfkc3) . +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-normalize-2.out tracker-3.7.1/tests/core/functions/functions-tracker-normalize-2.out --- tracker-3.7.0/tests/core/functions/functions-tracker-normalize-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-normalize-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-normalize-2.rq tracker-3.7.1/tests/core/functions/functions-tracker-normalize-2.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-normalize-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-normalize-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Use unbound value +SELECT (tracker:normalize (?v, 'nfd') AS ?a) +{ + VALUES ?x { 1 } +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-normalize-3.rq tracker-3.7.1/tests/core/functions/functions-tracker-normalize-3.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-normalize-3.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-normalize-3.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (tracker:normalize ('a', 'not a normalization') AS ?a) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-strip-punctuation-1.out tracker-3.7.1/tests/core/functions/functions-tracker-strip-punctuation-1.out --- tracker-3.7.0/tests/core/functions/functions-tracker-strip-punctuation-1.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-strip-punctuation-1.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"hello World" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-strip-punctuation-1.rq tracker-3.7.1/tests/core/functions/functions-tracker-strip-punctuation-1.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-strip-punctuation-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-strip-punctuation-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (tracker:strip-punctuation ('hello, World!?') AS ?str) {} \ No newline at end of file diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-unaccent-1.out tracker-3.7.1/tests/core/functions/functions-tracker-unaccent-1.out --- tracker-3.7.0/tests/core/functions/functions-tracker-unaccent-1.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-unaccent-1.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"aeiou" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-unaccent-1.rq tracker-3.7.1/tests/core/functions/functions-tracker-unaccent-1.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-unaccent-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-unaccent-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (tracker:unaccent ('áêïoù') AS ?str) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-unaccent-2.out tracker-3.7.1/tests/core/functions/functions-tracker-unaccent-2.out --- tracker-3.7.0/tests/core/functions/functions-tracker-unaccent-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-unaccent-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-unaccent-2.rq tracker-3.7.1/tests/core/functions/functions-tracker-unaccent-2.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-unaccent-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-unaccent-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Use unbound value +SELECT (tracker:unaccent (?v) AS ?a) +{ + VALUES ?x { 1 } +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-1.out tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-1.out --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-1.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-1.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"true" "false" "false" "true" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-1.rq tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-1.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,7 @@ +SELECT + (tracker:uri-is-descendant ('file:///', 'file:///a') AS ?a) + (tracker:uri-is-descendant ('file:///a', 'file:///b') AS ?b) + (tracker:uri-is-descendant ('file:///a', 'file:///') AS ?c) + (tracker:uri-is-descendant ('file:///', 'file:///a/b') AS ?d) +{ +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-2.out tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-2.out --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"false" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-2.rq tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-2.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,4 @@ +SELECT + (tracker:uri-is-descendant ('abcdefg', 'file:///a') AS ?a) +{ +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-3.out tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-3.out --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-3.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-3.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"false" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-3.rq tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-3.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-descendant-3.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-descendant-3.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Use unbound parameters +SELECT (tracker:uri-is-descendant (?a, ?b) AS ?c) +{ + VALUES ?v { 1 } +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-1.out tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-1.out --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-1.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-1.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"true" "false" "false" "false" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-1.rq tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-1.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,7 @@ +SELECT + (tracker:uri-is-parent ('file:///', 'file:///a') AS ?a) + (tracker:uri-is-parent ('file:///a', 'file:///b') AS ?b) + (tracker:uri-is-parent ('file:///a', 'file:///') AS ?c) + (tracker:uri-is-parent ('file:///', 'file:///a/b') AS ?d) +{ +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-2.out tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-2.out --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"false" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-2.rq tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-2.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,4 @@ +SELECT + (tracker:uri-is-parent ('abdcefg', 'file:///a') AS ?a) +{ +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-3.out tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-3.out --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-3.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-3.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"false" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-3.rq tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-3.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-3.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-3.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Unbound values as parameters +SELECT (tracker:uri-is-parent (?a, ?b) AS ?c) +{ + VALUES ?v { 1 } +} diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-4.out tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-4.out --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-4.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-4.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"false" diff -Nru tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-4.rq tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-4.rq --- tracker-3.7.0/tests/core/functions/functions-tracker-uri-is-parent-4.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-tracker-uri-is-parent-4.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,4 @@ +SELECT + (tracker:uri-is-parent ('file:///a/', 'file:///a/') AS ?c) +{ +} diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-3.out tracker-3.7.1/tests/core/functions/functions-xpath-3.out --- tracker-3.7.0/tests/core/functions/functions-xpath-3.out 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-3.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -"fifth|purposes" -"first|Test|optional" -"fourth|testing" -"other" -"second|Text" -"third|for|optional for third" diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-3.rq tracker-3.7.1/tests/core/functions/functions-xpath-3.rq --- tracker-3.7.0/tests/core/functions/functions-xpath-3.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-3.rq 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -PREFIX ex: -PREFIX ns: - -SELECT fn:string-join((?s,?t,?u),"|") -{ OPTIONAL { ?_x ex:s ?s . } - OPTIONAL { ?_x ex:t ?t . } - OPTIONAL { ?_x ex:u ?u . } -} ORDER BY ?s ?t ?u diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-1.out tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-1.out --- tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-1.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-1.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,6 @@ +"fifth|purposes" +"first|Test|optional" +"fourth|testing" +"other" +"second|Text" +"third|for|optional for third" diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-1.rq tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-1.rq --- tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,8 @@ +PREFIX ex: +PREFIX ns: + +SELECT fn:string-join((?s,?t,?u),"|") +{ OPTIONAL { ?_x ex:s ?s . } + OPTIONAL { ?_x ex:t ?t . } + OPTIONAL { ?_x ex:u ?u . } +} ORDER BY ?s ?t ?u diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-2.rq tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-2.rq --- tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (fn:string-join (('a', 'b'), 3) AS ?inval) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-3.rq tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-3.rq --- tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-3.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-3.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (fn:string-join ('a', '|') AS ?inval) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-4.rq tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-4.rq --- tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-4.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-4.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (fn:string-join (()) AS ?inval) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-5.out tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-5.out --- tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-5.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-5.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"" diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-5.rq tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-5.rq --- tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-5.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-5.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (fn:string-join ((),'') AS ?inval) {} diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-6.out tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-6.out --- tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-6.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-6.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"" diff -Nru tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-6.rq tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-6.rq --- tracker-3.7.0/tests/core/functions/functions-xpath-fn-string-join-6.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/functions/functions-xpath-fn-string-join-6.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT (fn:string-join ((),'sep') AS ?inval) {} diff -Nru tracker-3.7.0/tests/core/langstring/langmatches-1.out tracker-3.7.1/tests/core/langstring/langmatches-1.out --- tracker-3.7.0/tests/core/langstring/langmatches-1.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/langstring/langmatches-1.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,2 @@ +"http://example/a" +"http://example/d" diff -Nru tracker-3.7.0/tests/core/langstring/langmatches-1.rq tracker-3.7.1/tests/core/langstring/langmatches-1.rq --- tracker-3.7.0/tests/core/langstring/langmatches-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/langstring/langmatches-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +SELECT ?u { ?u example:langString ?s . FILTER (LANGMATCHES (?s, "en")) } order by ?u \ No newline at end of file diff -Nru tracker-3.7.0/tests/core/langstring/langmatches-2.out tracker-3.7.1/tests/core/langstring/langmatches-2.out --- tracker-3.7.0/tests/core/langstring/langmatches-2.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/langstring/langmatches-2.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru tracker-3.7.0/tests/core/langstring/langmatches-2.rq tracker-3.7.1/tests/core/langstring/langmatches-2.rq --- tracker-3.7.0/tests/core/langstring/langmatches-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/langstring/langmatches-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Match unbound value +SELECT LANGMATCHES(?v, 'en') +{ + VALUES ?x { 1 } +} \ No newline at end of file diff -Nru tracker-3.7.0/tests/core/langstring/langmatches.out tracker-3.7.1/tests/core/langstring/langmatches.out --- tracker-3.7.0/tests/core/langstring/langmatches.out 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/langstring/langmatches.out 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -"http://example/a" -"http://example/d" diff -Nru tracker-3.7.0/tests/core/langstring/langmatches.rq tracker-3.7.1/tests/core/langstring/langmatches.rq --- tracker-3.7.0/tests/core/langstring/langmatches.rq 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/langstring/langmatches.rq 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -SELECT ?u { ?u example:langString ?s . FILTER (LANGMATCHES (?s, "en")) } order by ?u \ No newline at end of file diff -Nru tracker-3.7.0/tests/core/regex/regex-query-003.out tracker-3.7.1/tests/core/regex/regex-query-003.out --- tracker-3.7.0/tests/core/regex/regex-query-003.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/regex/regex-query-003.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"false" diff -Nru tracker-3.7.0/tests/core/regex/regex-query-003.rq tracker-3.7.1/tests/core/regex/regex-query-003.rq --- tracker-3.7.0/tests/core/regex/regex-query-003.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/regex/regex-query-003.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +# Match unbound parameter +SELECT (regex (?v, 'abc') AS ?r) +{ + VALUES ?x { 1 } +} diff -Nru tracker-3.7.0/tests/core/regex/regex-query-004.out tracker-3.7.1/tests/core/regex/regex-query-004.out --- tracker-3.7.0/tests/core/regex/regex-query-004.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/regex/regex-query-004.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"false" "true" diff -Nru tracker-3.7.0/tests/core/regex/regex-query-004.rq tracker-3.7.1/tests/core/regex/regex-query-004.rq --- tracker-3.7.0/tests/core/regex/regex-query-004.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/regex/regex-query-004.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,2 @@ +# Test 'm' (multiline) flag +SELECT (regex('abc\nefg', '^a.*c$') AS ?r1) (regex('abc\nefg', '^a.*c$', 'm') AS ?r2) { } diff -Nru tracker-3.7.0/tests/core/regex/regex-query-005.out tracker-3.7.1/tests/core/regex/regex-query-005.out --- tracker-3.7.0/tests/core/regex/regex-query-005.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/regex/regex-query-005.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"false" "true" diff -Nru tracker-3.7.0/tests/core/regex/regex-query-005.rq tracker-3.7.1/tests/core/regex/regex-query-005.rq --- tracker-3.7.0/tests/core/regex/regex-query-005.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/regex/regex-query-005.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,2 @@ +# Test 's' (dotall) flag +SELECT (regex('abc\nefg', 'a.*g') AS ?r1) (regex('abc\nefg', 'a.*g', 's') AS ?r2) { } diff -Nru tracker-3.7.0/tests/core/regex/regex-query-006.out tracker-3.7.1/tests/core/regex/regex-query-006.out --- tracker-3.7.0/tests/core/regex/regex-query-006.out 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/regex/regex-query-006.out 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1 @@ +"true" "false" "true" diff -Nru tracker-3.7.0/tests/core/regex/regex-query-006.rq tracker-3.7.1/tests/core/regex/regex-query-006.rq --- tracker-3.7.0/tests/core/regex/regex-query-006.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/regex/regex-query-006.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,2 @@ +# Test 'x' (extended) flag +SELECT (regex('a b c', 'a b') AS ?r1) (regex('a b c', 'a b', 'x') AS ?r2) (regex('abc', 'a b', 'x') AS ?r3 ){ } diff -Nru tracker-3.7.0/tests/core/regex/regex-query-007.rq tracker-3.7.1/tests/core/regex/regex-query-007.rq --- tracker-3.7.0/tests/core/regex/regex-query-007.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/regex/regex-query-007.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,2 @@ +# Attempt invalid flags +SELECT (regex('a', 'a', '🍌') AS ?r1) { } diff -Nru tracker-3.7.0/tests/core/service/service-nonexistent-1.rq tracker-3.7.1/tests/core/service/service-nonexistent-1.rq --- tracker-3.7.0/tests/core/service/service-nonexistent-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/service/service-nonexistent-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +SELECT ?u { + SERVICE { + ?u a rdfs:Resource . + } +} diff -Nru tracker-3.7.0/tests/core/service/service-nonexistent-2.rq tracker-3.7.1/tests/core/service/service-nonexistent-2.rq --- tracker-3.7.0/tests/core/service/service-nonexistent-2.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/service/service-nonexistent-2.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +SELECT ?u { + SERVICE { + ?u a rdfs:Resource . + } +} diff -Nru tracker-3.7.0/tests/core/service/service-nonexistent-3.rq tracker-3.7.1/tests/core/service/service-nonexistent-3.rq --- tracker-3.7.0/tests/core/service/service-nonexistent-3.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/service/service-nonexistent-3.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +SELECT ?u { + SERVICE { + ?u a rdfs:Resource . + } +} diff -Nru tracker-3.7.0/tests/core/service/service-nonexistent-4.rq tracker-3.7.1/tests/core/service/service-nonexistent-4.rq --- tracker-3.7.0/tests/core/service/service-nonexistent-4.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/service/service-nonexistent-4.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +SELECT ?u { + SERVICE { + ?u a rdfs:Resource . + } +} diff -Nru tracker-3.7.0/tests/core/service/service-nonexistent-5.rq tracker-3.7.1/tests/core/service/service-nonexistent-5.rq --- tracker-3.7.0/tests/core/service/service-nonexistent-5.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/service/service-nonexistent-5.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +SELECT ?u { + SERVICE { + ?u a rdfs:Resource . + } +} diff -Nru tracker-3.7.0/tests/core/service/service-silent-1.rq tracker-3.7.1/tests/core/service/service-silent-1.rq --- tracker-3.7.0/tests/core/service/service-silent-1.rq 1970-01-01 00:00:00.000000000 +0000 +++ tracker-3.7.1/tests/core/service/service-silent-1.rq 2024-03-27 16:51:14.000000000 +0000 @@ -0,0 +1,5 @@ +SELECT ?u { + SERVICE SILENT { + ?u a rdfs:Resource . + } +} diff -Nru tracker-3.7.0/tests/core/tracker-service-test.c tracker-3.7.1/tests/core/tracker-service-test.c --- tracker-3.7.0/tests/core/tracker-service-test.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/tracker-service-test.c 2024-03-27 16:51:14.000000000 +0000 @@ -47,6 +47,12 @@ { "service/service-var-2", FALSE }, { "service/service-empty-1", FALSE }, { "service/service-empty-2", FALSE }, + { "service/service-nonexistent-1", TRUE }, + { "service/service-nonexistent-2", TRUE }, + { "service/service-nonexistent-3", TRUE }, + { "service/service-nonexistent-4", TRUE }, + { "service/service-nonexistent-5", TRUE }, + { "service/service-silent-1", FALSE }, { "service/property-function-1", FALSE }, }; @@ -63,21 +69,17 @@ GError *error) { GString *test_results; - gchar *results; + gchar *results = NULL; GError *nerror = NULL; gboolean retval; - if (test_info->expect_query_error) { - g_assert_true (error != NULL); - } else { - g_assert_no_error (error); + if (!test_info->expect_query_error) { + retval = g_file_get_contents (results_filename, &results, NULL, &nerror); + g_assert_true (retval); + g_assert_no_error (nerror); + g_clear_error (&nerror); } - retval = g_file_get_contents (results_filename, &results, NULL, &nerror); - g_assert_true (retval); - g_assert_no_error (nerror); - g_clear_error (&nerror); - /* compare results with reference output */ test_results = g_string_new (""); @@ -120,7 +122,9 @@ g_string_append (test_results, "\n"); } } - } else if (test_info->expect_query_error) { + } + + if (test_info->expect_query_error) { g_assert_true (error != NULL && error->domain == TRACKER_SPARQL_ERROR); g_string_free (test_results, TRUE); g_free (results); diff -Nru tracker-3.7.0/tests/core/tracker-sparql-test.c tracker-3.7.1/tests/core/tracker-sparql-test.c --- tracker-3.7.0/tests/core/tracker-sparql-test.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/core/tracker-sparql-test.c 2024-03-27 16:51:14.000000000 +0000 @@ -107,7 +107,13 @@ { "datetime/functions-timezone-1", "datetime/data-2", FALSE }, { "datetime/functions-timezone-2", "datetime/data-2", FALSE }, { "datetime/functions-timezone-3", "datetime/data-2", FALSE }, + { "datetime/functions-timezone-4", "datetime/data-2", FALSE }, + { "datetime/functions-timezone-5", "datetime/data-5", FALSE }, + { "datetime/functions-timezone-6", "datetime/data-2", FALSE }, { "datetime/functions-tz-1", "datetime/data-2", FALSE }, + { "datetime/functions-tz-2", "datetime/data-2", FALSE }, + { "datetime/functions-tz-3", "datetime/data-2", FALSE }, + { "datetime/functions-tz-4", "datetime/data-2", FALSE }, { "datetime/filter-1", "datetime/data-1", FALSE }, { "datetime/filter-2", "datetime/data-1", FALSE }, { "datetime/filter-3", "datetime/data-1", FALSE }, @@ -132,17 +138,31 @@ { "functions/functions-property-2", "functions/data-5", FALSE }, { "functions/functions-tracker-1", "functions/data-1", FALSE }, { "functions/functions-tracker-2", "functions/data-2", FALSE }, - { "functions/functions-tracker-3", "functions/data-2", FALSE }, + { "functions/functions-tracker-case-fold-1", "functions/data-2", FALSE }, + { "functions/functions-tracker-case-fold-2", "functions/data-2", FALSE }, { "functions/functions-tracker-4", "functions/data-2", FALSE }, - { "functions/functions-tracker-5", "functions/data-2", FALSE }, - { "functions/functions-tracker-6", "functions/data-2", FALSE }, - { "functions/functions-tracker-7", "functions/data-2", FALSE }, - { "functions/functions-tracker-8", "functions/data-2", FALSE }, - { "functions/functions-tracker-9", "functions/data-2", FALSE }, + { "functions/functions-tracker-unaccent-1", "functions/data-2", FALSE }, + { "functions/functions-tracker-unaccent-2", "functions/data-2", FALSE }, + { "functions/functions-tracker-uri-is-parent-1", "functions/data-2", FALSE }, + { "functions/functions-tracker-uri-is-parent-2", "functions/data-2", FALSE }, + { "functions/functions-tracker-uri-is-parent-3", "functions/data-2", FALSE }, + { "functions/functions-tracker-uri-is-parent-4", "functions/data-2", FALSE }, + { "functions/functions-tracker-uri-is-descendant-1", "functions/data-2", FALSE }, + { "functions/functions-tracker-uri-is-descendant-2", "functions/data-2", FALSE }, + { "functions/functions-tracker-uri-is-descendant-3", "functions/data-2", FALSE }, + { "functions/functions-tracker-normalize-1", "functions/data-2", FALSE }, + { "functions/functions-tracker-normalize-2", "functions/data-2", FALSE }, + { "functions/functions-tracker-normalize-3", "functions/data-2", TRUE }, + { "functions/functions-tracker-strip-punctuation-1", "functions/data-2", FALSE }, { "functions/functions-tracker-loc-1", "functions/data-3", FALSE }, { "functions/functions-xpath-1", "functions/data-1", FALSE }, { "functions/functions-xpath-2", "functions/data-1", FALSE }, - { "functions/functions-xpath-3", "functions/data-1", FALSE }, + { "functions/functions-xpath-fn-string-join-1", "functions/data-1", FALSE }, + { "functions/functions-xpath-fn-string-join-2", "functions/data-1", TRUE }, + { "functions/functions-xpath-fn-string-join-3", "functions/data-1", TRUE }, + { "functions/functions-xpath-fn-string-join-4", "functions/data-1", TRUE }, + { "functions/functions-xpath-fn-string-join-5", "functions/data-1", FALSE }, + { "functions/functions-xpath-fn-string-join-6", "functions/data-1", FALSE }, { "functions/functions-xpath-4", "functions/data-1", FALSE }, { "functions/functions-xpath-5", "functions/data-1", FALSE }, { "functions/functions-xpath-6", "functions/data-1", FALSE }, @@ -161,21 +181,30 @@ { "functions/functions-datatypes-3", "functions/data-3", FALSE }, { "functions/functions-datatypes-4", "functions/data-4", FALSE }, { "functions/functions-datatypes-5", "functions/data-1", FALSE }, + { "functions/functions-datatypes-6", "functions/data-1", FALSE }, + { "functions/functions-datatypes-7", "functions/data-1", FALSE }, { "functions/functions-builtin-bnode-1", "functions/data-1", FALSE }, { "functions/functions-builtin-bnode-2", "functions/data-1", FALSE }, { "functions/functions-builtin-uuid-1", "functions/data-1", FALSE }, { "functions/functions-builtin-hash-1", "functions/data-1", FALSE }, { "functions/functions-builtin-ucase-1", "functions/data-1", FALSE }, + { "functions/functions-builtin-ucase-2", "functions/data-1", FALSE }, { "functions/functions-builtin-lcase-1", "functions/data-1", FALSE }, + { "functions/functions-builtin-lcase-2", "functions/data-1", FALSE }, { "functions/functions-builtin-strlen-1", "functions/data-1", FALSE }, { "functions/functions-builtin-strbefore-1", "functions/data-1", FALSE }, + { "functions/functions-builtin-strbefore-2", "functions/data-1", FALSE }, + { "functions/functions-builtin-strbefore-3", "functions/data-1", FALSE }, { "functions/functions-builtin-strafter-1", "functions/data-1", FALSE }, + { "functions/functions-builtin-strafter-2", "functions/data-1", FALSE }, + { "functions/functions-builtin-strafter-3", "functions/data-1", FALSE }, { "functions/functions-builtin-substr-1", "functions/data-1", FALSE }, { "functions/functions-builtin-replace-1", "functions/data-1", FALSE }, { "functions/functions-builtin-replace-2", "functions/data-1", TRUE }, { "functions/functions-builtin-replace-3", "functions/data-1", TRUE }, { "functions/functions-builtin-replace-4", "functions/data-1", FALSE }, { "functions/functions-builtin-replace-5", "functions/data-1", TRUE }, + { "functions/functions-builtin-replace-6", "functions/data-1", TRUE }, { "functions/functions-builtin-contains-1", "functions/data-1", FALSE }, { "functions/functions-builtin-abs-1", "functions/data-1", FALSE }, { "functions/functions-builtin-ceil-1", "functions/data-1", FALSE }, @@ -183,6 +212,7 @@ { "functions/functions-builtin-round-1", "functions/data-1", FALSE }, { "functions/functions-builtin-uri-1", "functions/data-1", FALSE }, { "functions/functions-builtin-year-1", "functions/data-1", FALSE }, + { "functions/functions-builtin-year-2", "functions/data-1", FALSE }, { "functions/functions-builtin-month-1", "functions/data-1", FALSE }, { "functions/functions-builtin-day-1", "functions/data-1", FALSE }, { "functions/functions-builtin-hours-1", "functions/data-1", FALSE }, @@ -242,7 +272,8 @@ { "langstring/match-with-non-langstring", "langstring/data", FALSE }, { "langstring/match-with-langstring", "langstring/data", FALSE }, { "langstring/match-non-langstring", "langstring/data", FALSE }, - { "langstring/langmatches", "langstring/data", FALSE }, + { "langstring/langmatches-1", "langstring/data", FALSE }, + { "langstring/langmatches-2", "langstring/data", FALSE }, { "langstring/strlang", "langstring/data", FALSE }, { "lists/list-in-object", "lists/data-list-in-object", FALSE }, { "lists/list-in-subject", "lists/data-list-in-subject", FALSE }, @@ -252,6 +283,11 @@ { "optional/simple-optional-triple", "optional/simple-optional-triple", FALSE }, { "regex/regex-query-001", "regex/regex-data-01", FALSE }, { "regex/regex-query-002", "regex/regex-data-01", FALSE }, + { "regex/regex-query-003", "regex/regex-data-01", FALSE }, + { "regex/regex-query-004", "regex/regex-data-01", FALSE }, + { "regex/regex-query-005", "regex/regex-data-01", FALSE }, + { "regex/regex-query-006", "regex/regex-data-01", FALSE }, + { "regex/regex-query-007", "regex/regex-data-01", TRUE }, { "sort/query-sort-1", "sort/data-sort-1", FALSE }, { "sort/query-sort-2", "sort/data-sort-1", FALSE }, { "sort/query-sort-3", "sort/data-sort-3", FALSE }, @@ -393,19 +429,18 @@ GError *error) { GString *test_results; - gchar *results; + gchar *results = NULL; GError *nerror = NULL; gboolean retval; if (!test_info->expect_query_error) { g_assert_no_error (error); + retval = g_file_get_contents (results_filename, &results, NULL, &nerror); + g_assert_true (retval); + g_assert_no_error (nerror); + g_clear_error (&nerror); } - retval = g_file_get_contents (results_filename, &results, NULL, &nerror); - g_assert_true (retval); - g_assert_no_error (nerror); - g_clear_error (&nerror); - /* compare results with reference output */ test_results = g_string_new (""); diff -Nru tracker-3.7.0/tests/libtracker-sparql/tracker-cursor-test.c tracker-3.7.1/tests/libtracker-sparql/tracker-cursor-test.c --- tracker-3.7.0/tests/libtracker-sparql/tracker-cursor-test.c 2024-03-16 21:48:28.000000000 +0000 +++ tracker-3.7.1/tests/libtracker-sparql/tracker-cursor-test.c 2024-03-27 16:51:14.000000000 +0000 @@ -202,10 +202,11 @@ test_tracker_sparql_query_iterate_empty (gpointer fixture, gconstpointer user_data) { - TrackerSparqlConnection *conn = (TrackerSparqlConnection *) user_data; + TrackerSparqlConnection *conn = (TrackerSparqlConnection *) user_data, *prop_conn; TrackerSparqlCursor *cursor; GError *error = NULL; const gchar *query = "SELECT ?r WHERE {?r a nfo:FileDataObject; nao:identifier \"thisannotationdoesnotexist\"}"; + gint prop_cols; cursor = tracker_sparql_connection_query (conn, query, NULL, &error); g_assert_true (cursor); @@ -215,6 +216,14 @@ g_assert_false (tracker_sparql_cursor_next (cursor, NULL, NULL)); g_assert_true (tracker_sparql_cursor_get_n_columns (cursor) == 1); + g_object_get (G_OBJECT (cursor), + "n-columns", &prop_cols, + "connection", &prop_conn, + NULL); + + g_assert_cmpint (prop_cols, ==, tracker_sparql_cursor_get_n_columns (cursor)); + g_assert_true (prop_conn == conn); + /* FIXME: test behavior of cursor getters after last value */ g_object_unref (cursor);