summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2022-07-05 15:54:11 +0000
committerSam Thursfield <sam@afuera.me.uk>2022-07-05 15:54:11 +0000
commit53fba631702915b096d547697aceba01736fa8cb (patch)
tree55f6693203db12ed07ac5280d7f9a65a31ddc04a
parent32b8449f867355b1310d4951db35a5b030b4f4b4 (diff)
parent53069369187255d22a7edd4fc917c9c2b25edd52 (diff)
downloadtracker-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.yml2
-rw-r--r--src/libtracker-common/.gitignore1
-rw-r--r--src/libtracker-common/meson.build12
-rw-r--r--src/libtracker-common/tracker-common.h1
-rw-r--r--src/libtracker-common/tracker-enum-types.c.template44
-rw-r--r--src/libtracker-common/tracker-enum-types.h.template26
-rw-r--r--src/libtracker-common/tracker-enums.h38
-rw-r--r--src/libtracker-data/meson.build2
-rw-r--r--src/libtracker-data/tracker-data-manager.c28
-rw-r--r--src/libtracker-data/tracker-data-update.c70
-rw-r--r--src/libtracker-sparql/bus/meson.build1
-rw-r--r--src/libtracker-sparql/tracker-endpoint-dbus.c2
-rw-r--r--src/libtracker-sparql/tracker-notifier-private.h2
-rw-r--r--src/libtracker-sparql/tracker-notifier.c16
-rw-r--r--src/tracker/meson.build2
-rw-r--r--tests/libtracker-data/algebra/filter-scope-1.rq1
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