diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2021-03-13 13:48:47 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2021-03-21 21:54:32 +0100 |
commit | a1ba3ec3b9fb5a546f25f9ff10f09ae20fab91e0 (patch) | |
tree | 3bf46fc41bade6cf13a61bfb539b150cef481761 | |
parent | 0b70358d5fcbae77277594efcb3751509a89a893 (diff) | |
download | tracker-a1ba3ec3b9fb5a546f25f9ff10f09ae20fab91e0.tar.gz |
libtracker-data: Propagate errors when rebuilding FTS tokenized data
So these are caught during database initialization.
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 24 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.c | 9 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.h | 6 | ||||
-rw-r--r-- | src/libtracker-fts/tracker-fts.c | 19 | ||||
-rw-r--r-- | src/libtracker-fts/tracker-fts.h | 7 |
5 files changed, 42 insertions, 23 deletions
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 3e6cc98d8..67f97e687 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -3535,23 +3535,29 @@ ontology_get_fts_properties (TrackerDataManager *manager, } } -static void -rebuild_fts_tokens (TrackerDataManager *manager, - TrackerDBInterface *iface) +static gboolean +rebuild_fts_tokens (TrackerDataManager *manager, + TrackerDBInterface *iface, + GError **error) { GHashTableIter iter; gchar *graph; g_debug ("Rebuilding FTS tokens, this may take a moment..."); - tracker_db_interface_sqlite_fts_rebuild_tokens (iface, "main"); + 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)) - tracker_db_interface_sqlite_fts_rebuild_tokens (iface, graph); + 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"); /* Update the stamp file */ tracker_db_manager_tokenizer_update (manager->db_manager); + + return TRUE; } static gboolean @@ -4412,9 +4418,11 @@ skip_ontology_check: tracker_db_manager_set_current_locale (manager->db_manager); - rebuild_fts_tokens (manager, iface); + if (!rebuild_fts_tokens (manager, iface, error)) + return FALSE; } else if (!read_only && tracker_db_manager_get_tokenizer_changed (manager->db_manager)) { - rebuild_fts_tokens (manager, iface); + if (!rebuild_fts_tokens (manager, iface, error)) + return FALSE; } if (!read_only) { diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c index b8de62afa..6a7dd5353 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.c +++ b/src/libtracker-data/tracker-db-interface-sqlite.c @@ -2494,11 +2494,12 @@ tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *db_interface, return TRUE; } -void -tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, - const gchar *database) +gboolean +tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, + const gchar *database, + GError **error) { - tracker_fts_rebuild_tokens (interface->db, database, "fts5"); + return tracker_fts_rebuild_tokens (interface->db, database, "fts5", error); } void diff --git a/src/libtracker-data/tracker-db-interface-sqlite.h b/src/libtracker-data/tracker-db-interface-sqlite.h index 47919447b..1499a3aca 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.h +++ b/src/libtracker-data/tracker-db-interface-sqlite.h @@ -85,9 +85,9 @@ gboolean tracker_db_interface_sqlite_fts_delete_text (TrackerD gboolean tracker_db_interface_sqlite_fts_delete_id (TrackerDBInterface *interface, const gchar *database, int rowid); -void tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, - const gchar *database); - +gboolean tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, + const gchar *database, + GError **error); gboolean tracker_db_interface_attach_database (TrackerDBInterface *db_interface, GFile *file, diff --git a/src/libtracker-fts/tracker-fts.c b/src/libtracker-fts/tracker-fts.c index e8f474fd9..95767f33f 100644 --- a/src/libtracker-fts/tracker-fts.c +++ b/src/libtracker-fts/tracker-fts.c @@ -270,10 +270,11 @@ error: return TRUE; } -void -tracker_fts_rebuild_tokens (sqlite3 *db, - const gchar *database, - const gchar *table_name) +gboolean +tracker_fts_rebuild_tokens (sqlite3 *db, + const gchar *database, + const gchar *table_name, + GError **error) { gchar *query; gint rc; @@ -284,5 +285,13 @@ tracker_fts_rebuild_tokens (sqlite3 *db, rc = sqlite3_exec(db, query, NULL, NULL, NULL); g_free (query); - g_warn_if_fail (rc == SQLITE_OK); + if (rc != SQLITE_OK) { + g_set_error (error, + TRACKER_DB_INTERFACE_ERROR, + TRACKER_DB_OPEN_ERROR, + "%s", sqlite3_errstr (rc)); + return FALSE; + } + + return TRUE; } diff --git a/src/libtracker-fts/tracker-fts.h b/src/libtracker-fts/tracker-fts.h index 04074bacf..65f5665fa 100644 --- a/src/libtracker-fts/tracker-fts.h +++ b/src/libtracker-fts/tracker-fts.h @@ -49,9 +49,10 @@ gboolean tracker_fts_alter_table (sqlite3 *db, GHashTable *tables, GHashTable *grouped_columns, GError **error); -void tracker_fts_rebuild_tokens (sqlite3 *db, - const gchar *database, - const gchar *table_name); +gboolean tracker_fts_rebuild_tokens (sqlite3 *db, + const gchar *database, + const gchar *table_name, + GError **error); G_END_DECLS |