summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2021-03-13 13:48:47 +0100
committerCarlos Garnacho <carlosg@gnome.org>2021-03-21 21:54:32 +0100
commita1ba3ec3b9fb5a546f25f9ff10f09ae20fab91e0 (patch)
tree3bf46fc41bade6cf13a61bfb539b150cef481761
parent0b70358d5fcbae77277594efcb3751509a89a893 (diff)
downloadtracker-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.c24
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.c9
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.h6
-rw-r--r--src/libtracker-fts/tracker-fts.c19
-rw-r--r--src/libtracker-fts/tracker-fts.h7
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