diff options
author | Sam Thursfield <sam@afuera.me.uk> | 2022-07-05 15:54:11 +0000 |
---|---|---|
committer | Sam Thursfield <sam@afuera.me.uk> | 2022-07-05 15:54:11 +0000 |
commit | 53fba631702915b096d547697aceba01736fa8cb (patch) | |
tree | 55f6693203db12ed07ac5280d7f9a65a31ddc04a | |
parent | 32b8449f867355b1310d4951db35a5b030b4f4b4 (diff) | |
parent | 53069369187255d22a7edd4fc917c9c2b25edd52 (diff) | |
download | tracker-53fba631702915b096d547697aceba01736fa8cb.tar.gz |
Merge branch 'wip/carlosg/backports-3.3' into 'tracker-3.3'
Backports for 3.3
See merge request GNOME/tracker!521
-rw-r--r-- | .gitlab-ci.yml | 2 | ||||
-rw-r--r-- | src/libtracker-common/.gitignore | 1 | ||||
-rw-r--r-- | src/libtracker-common/meson.build | 12 | ||||
-rw-r--r-- | src/libtracker-common/tracker-common.h | 1 | ||||
-rw-r--r-- | src/libtracker-common/tracker-enum-types.c.template | 44 | ||||
-rw-r--r-- | src/libtracker-common/tracker-enum-types.h.template | 26 | ||||
-rw-r--r-- | src/libtracker-common/tracker-enums.h | 38 | ||||
-rw-r--r-- | src/libtracker-data/meson.build | 2 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 28 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-update.c | 70 | ||||
-rw-r--r-- | src/libtracker-sparql/bus/meson.build | 1 | ||||
-rw-r--r-- | src/libtracker-sparql/tracker-endpoint-dbus.c | 2 | ||||
-rw-r--r-- | src/libtracker-sparql/tracker-notifier-private.h | 2 | ||||
-rw-r--r-- | src/libtracker-sparql/tracker-notifier.c | 16 | ||||
-rw-r--r-- | src/tracker/meson.build | 2 | ||||
-rw-r--r-- | tests/libtracker-data/algebra/filter-scope-1.rq | 1 |
16 files changed, 109 insertions, 139 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ff06146bd..25cdd5cec 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -387,6 +387,8 @@ test-website: - website needs: - build-fedora-container@x86_64 + only: + - master coverage: extends: diff --git a/src/libtracker-common/.gitignore b/src/libtracker-common/.gitignore index 6b4eece96..2475fb8e2 100644 --- a/src/libtracker-common/.gitignore +++ b/src/libtracker-common/.gitignore @@ -1,4 +1,3 @@ tracker-turtle-writer.c tracker-turtle-writer.h -tracker-enum-types.[c|h] tracker-parser-sha1.h diff --git a/src/libtracker-common/meson.build b/src/libtracker-common/meson.build index aff153637..9ea3d660d 100644 --- a/src/libtracker-common/meson.build +++ b/src/libtracker-common/meson.build @@ -1,15 +1,5 @@ subdir('stop-words') -tracker_common_enums_header = files('tracker-enums.h') - -enums = gnome.mkenums('tracker-enum-types', - sources: tracker_common_enums_header, - c_template: 'tracker-enum-types.c.template', - h_template: 'tracker-enum-types.h.template', -) - -tracker_common_enum_header = enums[1] - tracker_common_sources = [ 'tracker-date-time.c', 'tracker-debug.c', @@ -19,7 +9,6 @@ tracker_common_sources = [ 'tracker-locale.c', 'tracker-parser-utils.c', 'tracker-language.c', - enums[0], enums[1], ] if unicode_library_name == 'icu' @@ -46,7 +35,6 @@ libtracker_common = static_library('tracker-common', commoninc = include_directories('.') tracker_common_dep = declare_dependency( - sources: [tracker_common_enum_header], link_with: libtracker_common, dependencies: tracker_common_dependencies, include_directories: [configinc, srcinc, commoninc], diff --git a/src/libtracker-common/tracker-common.h b/src/libtracker-common/tracker-common.h index 5bc03c9bf..e572b6ebc 100644 --- a/src/libtracker-common/tracker-common.h +++ b/src/libtracker-common/tracker-common.h @@ -36,7 +36,6 @@ #include "tracker-term-utils.h" #include "tracker-utils.h" #include "tracker-locale.h" -#include "tracker-enum-types.h" #undef __LIBTRACKER_COMMON_INSIDE__ diff --git a/src/libtracker-common/tracker-enum-types.c.template b/src/libtracker-common/tracker-enum-types.c.template deleted file mode 100644 index 097a659be..000000000 --- a/src/libtracker-common/tracker-enum-types.c.template +++ /dev/null @@ -1,44 +0,0 @@ -/*** BEGIN file-header ***/ -#include <config.h> - -#include "tracker-enum-types.h" - -/*** END file-header ***/ - -/*** BEGIN file-production ***/ -/* enumerations from "@basename@" */ -#include "@filename@" -/*** END file-production ***/ - - -/*** BEGIN value-header ***/ -GType -@enum_name@_get_type (void) -{ - static gsize g_define_type_id = 0; - - if (g_once_init_enter (&g_define_type_id)) { - static const G@Type@Value values[] = { -/*** END value-header ***/ - -/*** BEGIN value-production ***/ - { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, -/*** END value-production ***/ - -/*** BEGIN value-tail ***/ - { 0, NULL, NULL } - }; - GType type = - g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); - - g_once_init_leave (&g_define_type_id, type); - } - - return g_define_type_id; -} - -/*** END value-tail ***/ - -/*** BEGIN file-tail ***/ - -/*** END file-tail ***/ diff --git a/src/libtracker-common/tracker-enum-types.h.template b/src/libtracker-common/tracker-enum-types.h.template deleted file mode 100644 index a909a294c..000000000 --- a/src/libtracker-common/tracker-enum-types.h.template +++ /dev/null @@ -1,26 +0,0 @@ -/*** BEGIN file-header ***/ - -#ifndef __TRACKER_ENUMS_TYPES_H__ -#define __TRACKER_ENUMS_TYPES_H__ - -#include <glib-object.h> -#include "tracker-enums.h" - -G_BEGIN_DECLS -/*** END file-header ***/ - -/*** BEGIN file-production ***/ - -/* enumerations from "@basename@" */ -/*** END file-production ***/ - -/*** BEGIN value-header ***/ -GType @enum_name@_get_type (void) G_GNUC_CONST; -#define TRACKER_TYPE_@ENUMSHORT@ (@enum_name@_get_type ()) -/*** END value-header ***/ - -/*** BEGIN file-tail ***/ -G_END_DECLS - -#endif /* __TRACKER_ENUMS_TYPES_H__ */ -/*** END file-tail ***/ diff --git a/src/libtracker-common/tracker-enums.h b/src/libtracker-common/tracker-enums.h deleted file mode 100644 index d54b97b90..000000000 --- a/src/libtracker-common/tracker-enums.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2011, Nokia <ivan.frade@nokia.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifndef __TRACKER_ENUMS_H__ -#define __TRACKER_ENUMS_H__ - -G_BEGIN_DECLS - -typedef enum { - TRACKER_SERIALIZATION_FORMAT_SPARQL, - TRACKER_SERIALIZATION_FORMAT_TURTLE, - /* JSON and JSON_LD are treated as the same thing right now, but we could - * treat them differently if we wanted. also it's nice to be able to pass - * both 'json' and 'json-ld' to `tracker extract --output-format=`. - */ - TRACKER_SERIALIZATION_FORMAT_JSON, - TRACKER_SERIALIZATION_FORMAT_JSON_LD, -} TrackerSerializationFormat; - -G_END_DECLS - -#endif /* __TRACKER_ENUMS_H__ */ diff --git a/src/libtracker-data/meson.build b/src/libtracker-data/meson.build index 562c6f735..f13c8afba 100644 --- a/src/libtracker-data/meson.build +++ b/src/libtracker-data/meson.build @@ -33,7 +33,6 @@ libtracker_data = static_library('tracker-data', 'tracker-uuid.c', 'tracker-vtab-service.c', 'tracker-vtab-triples.c', - tracker_common_enum_header, tracker_data_enums[0], tracker_data_enums[1], c_args: tracker_c_args, @@ -50,5 +49,4 @@ tracker_data_dep = declare_dependency( link_with: [libtracker_data], dependencies: tracker_data_dependencies, include_directories: include_directories('.'), - sources: enums[1], ) diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 78e7fcde8..b561de71e 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -3831,20 +3831,34 @@ rebuild_fts_tokens (TrackerDataManager *manager, TrackerDBInterface *iface, GError **error) { + TrackerProperty **properties; GHashTableIter iter; gchar *graph; + gboolean has_fts = FALSE; + guint len, i; - g_debug ("Rebuilding FTS tokens, this may take a moment..."); - if (!tracker_db_interface_sqlite_fts_rebuild_tokens (iface, "main", error)) - return FALSE; + properties = tracker_ontologies_get_properties (manager->ontologies, &len); - g_hash_table_iter_init (&iter, manager->graphs); - while (g_hash_table_iter_next (&iter, (gpointer*) &graph, NULL)) { - if (!tracker_db_interface_sqlite_fts_rebuild_tokens (iface, graph, error)) + for (i = 0; i < len; i++) { + has_fts |= tracker_property_get_fulltext_indexed (properties[i]); + if (has_fts) + break; + } + + if (has_fts) { + g_debug ("Rebuilding FTS tokens, this may take a moment..."); + if (!tracker_db_interface_sqlite_fts_rebuild_tokens (iface, "main", error)) return FALSE; + + g_hash_table_iter_init (&iter, manager->graphs); + while (g_hash_table_iter_next (&iter, (gpointer*) &graph, NULL)) { + if (!tracker_db_interface_sqlite_fts_rebuild_tokens (iface, graph, error)) + return FALSE; + } + + g_debug ("FTS tokens rebuilt"); } - g_debug ("FTS tokens rebuilt"); /* Update the stamp file */ tracker_db_manager_tokenizer_update (manager->db_manager); diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index 2b5935a1a..6aa65c911 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -406,6 +406,8 @@ tracker_data_update_initialize_modseq (TrackerData *data, TrackerDBCursor *cursor = NULL; TrackerDBInterface *temp_iface; TrackerDBStatement *stmt; + TrackerOntologies *ontologies; + TrackerProperty *property; GError *inner_error = NULL; gint max_modseq = 0; @@ -414,9 +416,13 @@ tracker_data_update_initialize_modseq (TrackerData *data, return TRUE; temp_iface = tracker_data_manager_get_writable_db_interface (data->manager); + ontologies = tracker_data_manager_get_ontologies (data->manager); + property = tracker_ontologies_get_property_by_uri (ontologies, TRACKER_PREFIX_NRL "modified"); - stmt = tracker_db_interface_create_statement (temp_iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &inner_error, - "SELECT MAX(\"nrl:modified\") AS A FROM \"rdfs:Resource\""); + stmt = tracker_db_interface_create_vstatement (temp_iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &inner_error, + "SELECT MAX(object) FROM tracker_triples " + "WHERE predicate = %" G_GINT64_FORMAT, + tracker_property_get_id (property)); if (stmt) { cursor = tracker_db_statement_start_cursor (stmt, &inner_error); @@ -1776,6 +1782,36 @@ process_domain_indexes (TrackerData *data, } static gboolean +maybe_convert_value (TrackerData *data, + TrackerPropertyType source, + TrackerPropertyType target, + const GValue *value, + GValue *value_out) +{ + if (source == TRACKER_PROPERTY_TYPE_RESOURCE && + target == TRACKER_PROPERTY_TYPE_STRING && + G_VALUE_HOLDS_INT64 (value)) { + TrackerDBInterface *iface; + gchar *str; + + iface = tracker_data_manager_get_writable_db_interface (data->manager); + str = tracker_data_query_resource_urn (data->manager, iface, + g_value_get_int64 (value)); + + if (!str) { + str = g_strdup_printf ("urn:bnode:%" G_GINT64_FORMAT, + g_value_get_int64 (value)); + } + + g_value_init (value_out, G_TYPE_STRING); + g_value_take_string (value_out, str); + return TRUE; + } + + return FALSE; +} + +static gboolean cache_insert_metadata_decomposed (TrackerData *data, TrackerProperty *property, const GValue *object, @@ -1806,6 +1842,8 @@ cache_insert_metadata_decomposed (TrackerData *data, while (*super_properties) { gboolean super_is_multi; GArray *super_old_values; + GValue converted = G_VALUE_INIT; + const GValue *val; super_is_multi = tracker_property_get_multiple_values (*super_properties); super_old_values = get_old_property_values (data, *super_properties, &new_error); @@ -1817,14 +1855,25 @@ cache_insert_metadata_decomposed (TrackerData *data, data->resource_buffer->fts_updated |= tracker_property_get_fulltext_indexed (*super_properties); + if (maybe_convert_value (data, + tracker_property_get_data_type (property), + tracker_property_get_data_type (*super_properties), + object, + &converted)) + val = &converted; + else + val = object; + if (super_is_multi || super_old_values->len == 0) { - change |= cache_insert_metadata_decomposed (data, *super_properties, object, + change |= cache_insert_metadata_decomposed (data, *super_properties, val, &new_error); if (new_error) { + g_value_unset (&converted); g_propagate_error (error, new_error); return FALSE; } } + g_value_unset (&converted); super_properties++; } @@ -1951,8 +2000,21 @@ delete_metadata_decomposed (TrackerData *data, /* also delete super property values */ super_properties = tracker_property_get_super_properties (property); while (*super_properties) { - change |= delete_metadata_decomposed (data, *super_properties, object, error); + GValue converted = G_VALUE_INIT; + const GValue *val; + + if (maybe_convert_value (data, + tracker_property_get_data_type (property), + tracker_property_get_data_type (*super_properties), + object, + &converted)) + val = &converted; + else + val = object; + + change |= delete_metadata_decomposed (data, *super_properties, val, error); super_properties++; + g_value_unset (&converted); } return change; diff --git a/src/libtracker-sparql/bus/meson.build b/src/libtracker-sparql/bus/meson.build index 53d93c057..59caf678e 100644 --- a/src/libtracker-sparql/bus/meson.build +++ b/src/libtracker-sparql/bus/meson.build @@ -5,7 +5,6 @@ libtracker_bus = static_library('tracker-bus', 'tracker-bus-fd-cursor.vala', 'tracker-bus-statement.vala', '../../libtracker-common/libtracker-common.vapi', - tracker_common_enum_header, c_args: tracker_c_args + [ '-include', 'libtracker-sparql/tracker-private.h', ], diff --git a/src/libtracker-sparql/tracker-endpoint-dbus.c b/src/libtracker-sparql/tracker-endpoint-dbus.c index fa840e0e3..c6735603d 100644 --- a/src/libtracker-sparql/tracker-endpoint-dbus.c +++ b/src/libtracker-sparql/tracker-endpoint-dbus.c @@ -43,6 +43,7 @@ #include "tracker-endpoint-dbus.h" #include "tracker-notifier.h" +#include "tracker-notifier-private.h" #include "tracker-private.h" #include <gio/gio.h> @@ -1008,6 +1009,7 @@ tracker_endpoint_dbus_initable_init (GInitable *initable, conn = tracker_endpoint_get_sparql_connection (endpoint); endpoint_dbus->notifier = tracker_sparql_connection_create_notifier (conn); + tracker_notifier_disable_urn_query (endpoint_dbus->notifier); g_signal_connect (endpoint_dbus->notifier, "events", G_CALLBACK (notifier_events_cb), endpoint); diff --git a/src/libtracker-sparql/tracker-notifier-private.h b/src/libtracker-sparql/tracker-notifier-private.h index aabe9f1bc..e808be1e2 100644 --- a/src/libtracker-sparql/tracker-notifier-private.h +++ b/src/libtracker-sparql/tracker-notifier-private.h @@ -39,4 +39,6 @@ _tracker_notifier_event_cache_push_event (TrackerNotifierEventCache *cache, void _tracker_notifier_event_cache_flush_events (TrackerNotifierEventCache *cache); +void tracker_notifier_disable_urn_query (TrackerNotifier *notifier); + #endif /* __TRACKER_NOTIFIER_PRIVATE_H__ */ diff --git a/src/libtracker-sparql/tracker-notifier.c b/src/libtracker-sparql/tracker-notifier.c index 01081a75b..86329ce9d 100644 --- a/src/libtracker-sparql/tracker-notifier.c +++ b/src/libtracker-sparql/tracker-notifier.c @@ -74,7 +74,8 @@ struct _TrackerNotifierPrivate { TrackerSparqlStatement *local_statement; GAsyncQueue *queue; gint n_local_statement_slots; - gboolean querying; + guint querying : 1; + guint urn_query_disabled : 1; GMutex mutex; }; @@ -633,7 +634,9 @@ _tracker_notifier_event_cache_flush_events (TrackerNotifierEventCache *cache) cache->first = g_sequence_get_begin_iter (cache->sequence); g_async_queue_lock (priv->queue); - if (priv->querying) { + if (priv->urn_query_disabled) { + tracker_notifier_emit_events_in_idle (cache); + } else if (priv->querying) { g_async_queue_push_unlocked (priv->queue, cache); } else { priv->querying = TRUE; @@ -946,3 +949,12 @@ tracker_notifier_event_get_urn (TrackerNotifierEvent *event) g_return_val_if_fail (event != NULL, NULL); return event->urn; } + +void +tracker_notifier_disable_urn_query (TrackerNotifier *notifier) +{ + TrackerNotifierPrivate *priv; + + priv = tracker_notifier_get_instance_private (notifier); + priv->urn_query_disabled = TRUE; +} diff --git a/src/tracker/meson.build b/src/tracker/meson.build index 1cb0a4932..069cdae8f 100644 --- a/src/tracker/meson.build +++ b/src/tracker/meson.build @@ -27,7 +27,7 @@ executable(command_name, sources, ], install: true, install_rpath: tracker_internal_libs_dir, - dependencies: [tracker_sparql_dep, tracker_data_dep], + dependencies: [tracker_common_dep, tracker_sparql_dep, tracker_data_dep], include_directories: [commoninc, configinc, srcinc], ) diff --git a/tests/libtracker-data/algebra/filter-scope-1.rq b/tests/libtracker-data/algebra/filter-scope-1.rq index 7ee5a24ad..a8cd89ca9 100644 --- a/tests/libtracker-data/algebra/filter-scope-1.rq +++ b/tests/libtracker-data/algebra/filter-scope-1.rq @@ -7,3 +7,4 @@ SELECT ?v ?w ?v2 OPTIONAL { :x :p ?v2 FILTER(?v = 1) } } } +ORDER BY ?v ?w ?v2 |