[tracker/sam/error-no-ontology: 1/2] libtracker-sparql: Translate errors from libtracker-data domain
- From: Sam Thursfield <sthursfield src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/sam/error-no-ontology: 1/2] libtracker-sparql: Translate errors from libtracker-data domain
- Date: Tue, 28 Apr 2020 23:58:08 +0000 (UTC)
commit 2d0b91043c342aa7284f46822890010ab02d51d2
Author: Sam Thursfield <sam afuera me uk>
Date: Wed Apr 29 01:56:08 2020 +0200
libtracker-sparql: Translate errors from libtracker-data domain
The libtracker-data error domain is internal so we need to translate
any errors to the libtracker-sparql domain before returning them to the
user.
src/libtracker-direct/tracker-direct.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
---
diff --git a/src/libtracker-direct/tracker-direct.c b/src/libtracker-direct/tracker-direct.c
index 1994579ca..53d6f01fb 100644
--- a/src/libtracker-direct/tracker-direct.c
+++ b/src/libtracker-direct/tracker-direct.c
@@ -235,6 +235,36 @@ translate_flags (TrackerSparqlConnectionFlags flags)
return db_flags;
}
+static GError *
+translate_error (GError *error)
+{
+ GError *new_error = NULL;
+
+ if (error->domain == TRACKER_DATA_ONTOLOGY_ERROR) {
+ /* This is an internal error domain, so translate to a libtracker-sparql error code. */
+ switch (error->code) {
+ case TRACKER_DATA_UNSUPPORTED_LOCATION:
+ case TRACKER_DATA_UNSUPPORTED_ONTOLOGY_CHANGE:
+ new_error = g_error_new_literal (TRACKER_SPARQL_ERROR,
+ TRACKER_SPARQL_ERROR_UNSUPPORTED,
+ error->message);
+ break;
+ default:
+ new_error = g_error_new_literal (TRACKER_SPARQL_ERROR,
+ TRACKER_SPARQL_ERROR_INTERNAL,
+ error->message);
+ }
+ }
+
+ if (new_error) {
+ g_error_free (error);
+ return new_error;
+ } else {
+ return error;
+ }
+}
+
+
static gboolean
tracker_direct_connection_initable_init (GInitable *initable,
GCancellable *cancellable,
@@ -246,6 +276,7 @@ tracker_direct_connection_initable_init (GInitable *initable,
GHashTable *namespaces;
GHashTableIter iter;
gchar *prefix, *ns;
+ GError *inner_error = NULL;
conn = TRACKER_DIRECT_CONNECTION (initable);
priv = tracker_direct_connection_get_instance_private (conn);
@@ -264,7 +295,8 @@ tracker_direct_connection_initable_init (GInitable *initable,
priv->data_manager = tracker_data_manager_new (db_flags, priv->store,
priv->ontology,
100, 100);
- if (!g_initable_init (G_INITABLE (priv->data_manager), cancellable, error)) {
+ if (!g_initable_init (G_INITABLE (priv->data_manager), cancellable, &inner_error)) {
+ g_propagate_error (error, translate_error (inner_error));
g_clear_object (&priv->data_manager);
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]