summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2022-06-05 00:19:51 +0200
committerCarlos Garnacho <carlosg@gnome.org>2022-07-05 12:14:45 +0200
commite6476933138f6a07022a2e95c9f3b9ba0c25be1d (patch)
tree6caf0e400a326c00f8dd154c7ca06a874b5c1d84
parentd7c478b7556f4975406399a9918460fe8188ccde (diff)
downloadtracker-e6476933138f6a07022a2e95c9f3b9ba0c25be1d.tar.gz
libtracker-sparql: Do not attempt to rebuild non-existing FTS tables
If a database/ontology has no fulltext-indexed properties, we do not create a corresponding FTS table. Likewise, parser/locale updates should not attempt to update it, or we will get a "SQL logic error" poking non-existing tables. Closes: https://gitlab.gnome.org/GNOME/nautilus/-/issues/2278
-rw-r--r--src/libtracker-data/tracker-data-manager.c28
1 files changed, 21 insertions, 7 deletions
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);