diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2021-03-13 14:11:39 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2021-03-21 21:54:32 +0100 |
commit | 23fb3da17bc92ccbc6f74acaa7008637f0e000b4 (patch) | |
tree | 7cf0204edd5b1e33e6ba8ef4d92e4043685b8a2c | |
parent | a1ba3ec3b9fb5a546f25f9ff10f09ae20fab91e0 (diff) | |
download | tracker-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.c | 4 | ||||
-rw-r--r-- | src/libtracker-fts/tracker-fts-tokenizer.c | 21 | ||||
-rw-r--r-- | src/libtracker-fts/tracker-fts-tokenizer.h | 3 | ||||
-rw-r--r-- | src/libtracker-fts/tracker-fts.c | 16 | ||||
-rw-r--r-- | src/libtracker-fts/tracker-fts.h | 9 |
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, |