diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2022-06-05 00:19:51 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2022-07-05 12:14:45 +0200 |
commit | e6476933138f6a07022a2e95c9f3b9ba0c25be1d (patch) | |
tree | 6caf0e400a326c00f8dd154c7ca06a874b5c1d84 | |
parent | d7c478b7556f4975406399a9918460fe8188ccde (diff) | |
download | tracker-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.c | 28 |
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); |