summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2021-03-13 14:11:39 +0100
committerCarlos Garnacho <carlosg@gnome.org>2021-03-21 21:54:32 +0100
commit23fb3da17bc92ccbc6f74acaa7008637f0e000b4 (patch)
tree7cf0204edd5b1e33e6ba8ef4d92e4043685b8a2c
parenta1ba3ec3b9fb5a546f25f9ff10f09ae20fab91e0 (diff)
downloadtracker-wip/carlosg/fts-error-propagation.tar.gz
libtracker-data: Handle errors initializing the fts5 modulewip/carlosg/fts-error-propagation
Propagate these up the stack.
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.c4
-rw-r--r--src/libtracker-fts/tracker-fts-tokenizer.c21
-rw-r--r--src/libtracker-fts/tracker-fts-tokenizer.h3
-rw-r--r--src/libtracker-fts/tracker-fts.c16
-rw-r--r--src/libtracker-fts/tracker-fts.h9
5 files changed, 36 insertions, 17 deletions
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c
index 6a7dd5353..0be15c283 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -2254,7 +2254,9 @@ tracker_db_interface_sqlite_fts_init (TrackerDBInterface *db_interface,
GError *inner_error = NULL;
GStrv fts_columns;
- tracker_fts_init_db (db_interface->db, db_interface, db_interface->flags, properties);
+ if (!tracker_fts_init_db (db_interface->db, db_interface,
+ db_interface->flags, properties, error))
+ return FALSE;
if (create &&
!tracker_fts_create_table (db_interface->db, database, "fts5",
diff --git a/src/libtracker-fts/tracker-fts-tokenizer.c b/src/libtracker-fts/tracker-fts-tokenizer.c
index d2688ac3b..707e81a81 100644
--- a/src/libtracker-fts/tracker-fts-tokenizer.c
+++ b/src/libtracker-fts/tracker-fts-tokenizer.c
@@ -380,7 +380,9 @@ tracker_rank_function (const Fts5ExtensionApi *api,
}
static fts5_api *
-get_fts5_api (sqlite3 *db) {
+get_fts5_api (sqlite3 *db,
+ GError **error)
+{
int rc = SQLITE_OK;
sqlite3_stmt *stmt;
fts5_api *api = NULL;
@@ -391,7 +393,7 @@ get_fts5_api (sqlite3 *db) {
rc = sqlite3_prepare_v2(db, "SELECT fts5(?1)",
-1, &stmt, 0);
if (rc != SQLITE_OK)
- return NULL;
+ goto error;
sqlite3_bind_pointer (stmt, 1, (void*) &api, "fts5_api_ptr", NULL);
sqlite3_step (stmt);
@@ -402,7 +404,7 @@ get_fts5_api (sqlite3 *db) {
-1, &stmt, 0);
if (rc != SQLITE_OK)
- return NULL;
+ goto error;
if (sqlite3_step (stmt) == SQLITE_ROW)
memcpy (&api, sqlite3_column_blob (stmt, 0), sizeof (api));
@@ -411,6 +413,14 @@ get_fts5_api (sqlite3 *db) {
sqlite3_finalize (stmt);
return api;
+
+error:
+ g_set_error (error,
+ TRACKER_DB_INTERFACE_ERROR,
+ TRACKER_DB_OPEN_ERROR,
+ "Could not override fts5 tokenizer: %s",
+ sqlite3_errstr (rc));
+ return NULL;
}
static TrackerTokenizerFunctionData *
@@ -437,14 +447,15 @@ gboolean
tracker_tokenizer_initialize (sqlite3 *db,
TrackerDBInterface *interface,
TrackerDBManagerFlags flags,
- const gchar **property_names)
+ const gchar **property_names,
+ GError **error)
{
TrackerTokenizerData *data;
TrackerTokenizerFunctionData *func_data;
fts5_tokenizer *tokenizer;
fts5_api *api;
- api = get_fts5_api (db);
+ api = get_fts5_api (db, error);
if (!api)
return FALSE;
diff --git a/src/libtracker-fts/tracker-fts-tokenizer.h b/src/libtracker-fts/tracker-fts-tokenizer.h
index 0065167a0..0e9da34c1 100644
--- a/src/libtracker-fts/tracker-fts-tokenizer.h
+++ b/src/libtracker-fts/tracker-fts-tokenizer.h
@@ -29,6 +29,7 @@
gboolean tracker_tokenizer_initialize (sqlite3 *db,
TrackerDBInterface *interface,
TrackerDBManagerFlags flags,
- const gchar **property_names);
+ const gchar **property_names,
+ GError **error);
#endif /* __TRACKER_FTS_TOKENIZER_H__ */
diff --git a/src/libtracker-fts/tracker-fts.c b/src/libtracker-fts/tracker-fts.c
index 95767f33f..55211fb81 100644
--- a/src/libtracker-fts/tracker-fts.c
+++ b/src/libtracker-fts/tracker-fts.c
@@ -65,10 +65,11 @@ get_fts_properties (GHashTable *tables)
}
gboolean
-tracker_fts_init_db (sqlite3 *db,
- TrackerDBInterface *interface,
- TrackerDBManagerFlags flags,
- GHashTable *tables)
+tracker_fts_init_db (sqlite3 *db,
+ TrackerDBInterface *interface,
+ TrackerDBManagerFlags flags,
+ GHashTable *tables,
+ GError **error)
{
gchar **property_names;
gboolean retval;
@@ -76,13 +77,16 @@ tracker_fts_init_db (sqlite3 *db,
gchar *err;
if (sqlite3_load_extension (db, NULL, "sqlite3_fts5_init", &err) != SQLITE_OK) {
- g_warning ("Could not load fts5 module: %s", err);
+ g_set_error (error,
+ TRACKER_DB_INTERFACE_ERROR,
+ TRACKER_DB_OPEN_ERROR,
+ "Could not load fts5 module: %s", err);
return FALSE;
}
#endif
property_names = get_fts_properties (tables);
- retval = tracker_tokenizer_initialize (db, interface, flags, (const gchar **) property_names);
+ retval = tracker_tokenizer_initialize (db, interface, flags, (const gchar **) property_names, error);
g_strfreev (property_names);
return retval;
diff --git a/src/libtracker-fts/tracker-fts.h b/src/libtracker-fts/tracker-fts.h
index 65f5665fa..795837f38 100644
--- a/src/libtracker-fts/tracker-fts.h
+++ b/src/libtracker-fts/tracker-fts.h
@@ -29,10 +29,11 @@
G_BEGIN_DECLS
-gboolean tracker_fts_init_db (sqlite3 *db,
- TrackerDBInterface *interface,
- TrackerDBManagerFlags flags,
- GHashTable *tables);
+gboolean tracker_fts_init_db (sqlite3 *db,
+ TrackerDBInterface *interface,
+ TrackerDBManagerFlags flags,
+ GHashTable *tables,
+ GError **error);
gboolean tracker_fts_create_table (sqlite3 *db,
const gchar *database,
gchar *table_name,