[tracker/wip/carlosg/data-update-error-propagation: 2/11] libtracker-data: Propagate errors from tracker_data_update_ensure_resource
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/data-update-error-propagation: 2/11] libtracker-data: Propagate errors from tracker_data_update_ensure_resource
- Date: Sun, 21 Feb 2021 19:31:58 +0000 (UTC)
commit 3b58109fa2805f5490aeec6aee6877c779e98f4a
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun Feb 21 17:50:10 2021 +0100
libtracker-data: Propagate errors from tracker_data_update_ensure_resource
Instead of keeping errors for itself, propagate those up, all the way
up.
Fixes: https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/150
src/libtracker-data/tracker-data-manager.c | 10 ++++++++--
src/libtracker-data/tracker-data-update.c | 32 +++++++++++++++++++-----------
src/libtracker-data/tracker-data-update.h | 3 ++-
3 files changed, 30 insertions(+), 15 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index d9c3d9ddf..d90a9d9fc 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -735,7 +735,10 @@ tracker_data_ontology_load_statement (TrackerDataManager *manager,
}
subject_id = tracker_data_update_ensure_resource (manager->data_update,
- subject, NULL);
+ subject, NULL, error);
+ if (!subject_id)
+ return;
+
class = tracker_class_new (FALSE);
tracker_class_set_ontologies (class, manager->ontologies);
tracker_class_set_is_new (class, in_update);
@@ -780,7 +783,10 @@ tracker_data_ontology_load_statement (TrackerDataManager *manager,
subject_id = tracker_data_update_ensure_resource (manager->data_update,
subject,
- NULL);
+ NULL, error);
+ if (!subject_id)
+ return;
+
property = tracker_property_new (FALSE);
tracker_property_set_ontologies (property, manager->ontologies);
tracker_property_set_is_new (property, in_update);
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index 0072d73a9..9ad19b009 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -687,11 +687,12 @@ query_resource_id (TrackerData *data,
gint
tracker_data_update_ensure_resource (TrackerData *data,
const gchar *uri,
- gboolean *create)
+ gboolean *create,
+ GError **error)
{
TrackerDBInterface *iface;
TrackerDBStatement *stmt = NULL;
- GError *error = NULL;
+ GError *inner_error = NULL;
gchar *key;
gint id;
@@ -705,18 +706,18 @@ tracker_data_update_ensure_resource (TrackerData *data,
iface = tracker_data_manager_get_writable_db_interface (data->manager);
- stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE,
&inner_error,
"INSERT INTO Resource (Uri, BlankNode) VALUES (?, ?)");
if (stmt) {
tracker_db_statement_bind_text (stmt, 0, uri);
tracker_db_statement_bind_int (stmt, 1, g_str_has_prefix (uri, "urn:bnode:"));
- tracker_db_statement_execute (stmt, &error);
+ tracker_db_statement_execute (stmt, &inner_error);
g_object_unref (stmt);
}
- if (error) {
- if (g_error_matches (error,
+ if (inner_error) {
+ if (g_error_matches (inner_error,
TRACKER_DB_INTERFACE_ERROR,
TRACKER_DB_CONSTRAINT)) {
id = query_resource_id (data, uri);
@@ -726,13 +727,14 @@ tracker_data_update_ensure_resource (TrackerData *data,
*create = FALSE;
g_hash_table_insert (data->update_buffer.resource_cache, g_strdup (uri),
GINT_TO_POINTER (id));
- g_error_free (error);
+ g_error_free (inner_error);
return id;
}
}
- g_error ("Could not ensure resource existence: %s", error->message);
- g_error_free (error);
+ g_propagate_error (error, inner_error);
+
+ return 0;
}
if (create)
@@ -1680,7 +1682,7 @@ bytes_to_gvalue (GBytes *bytes,
tracker_date_time_set_from_string (gvalue, value, error);
break;
case TRACKER_PROPERTY_TYPE_RESOURCE:
- object_id = tracker_data_update_ensure_resource (data, value, NULL);
+ object_id = tracker_data_update_ensure_resource (data, value, NULL, error);
g_value_init (gvalue, G_TYPE_INT64);
g_value_set_int64 (gvalue, object_id);
break;
@@ -2261,7 +2263,10 @@ resource_buffer_switch (TrackerData *data,
resource_id =
tracker_data_update_ensure_resource (data,
subject,
- NULL);
+ NULL,
+ error);
+ if (resource_id == 0)
+ return FALSE;
resource_buffer = g_slice_new0 (TrackerDataUpdateBufferResource);
resource_buffer->id = resource_id;
@@ -3034,7 +3039,10 @@ tracker_data_ensure_graph (TrackerData *data,
TrackerDBStatement *stmt;
gint id;
- id = tracker_data_update_ensure_resource (data, uri, NULL);
+ id = tracker_data_update_ensure_resource (data, uri, NULL, error);
+ if (id == 0)
+ return 0;
+
iface = tracker_data_manager_get_writable_db_interface (data->manager);
stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, error,
"INSERT OR IGNORE INTO Graph (ID) VALUES (?)");
diff --git a/src/libtracker-data/tracker-data-update.h b/src/libtracker-data/tracker-data-update.h
index 8df34e213..9b6ceee57 100644
--- a/src/libtracker-data/tracker-data-update.h
+++ b/src/libtracker-data/tracker-data-update.h
@@ -145,7 +145,8 @@ gboolean tracker_data_update_resource (TrackerData *data,
gint tracker_data_update_ensure_resource (TrackerData *data,
const gchar *uri,
- gboolean *create);
+ gboolean *create,
+ GError **error);
gchar * tracker_data_update_ensure_new_bnode (TrackerData *data,
TrackerDBInterface *iface,
GError **error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]