[tracker/wip/carlosg/sparql1.1: 109/201] libtracker-data: Refactor select/insert/delete/update quad handling



commit 3be6755f941dfa1e7b6525aa08e31ba204ee9243
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Jun 9 23:57:24 2019 +0200

    libtracker-data: Refactor select/insert/delete/update quad handling
    
    Separate into a separate function, so it's easier to use from other places
    than GraphNode.

 src/libtracker-data/tracker-sparql.c | 89 +++++++++++++++++++++---------------
 1 file changed, 53 insertions(+), 36 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index c2c336740..c17f2b7f0 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -1335,6 +1335,57 @@ _add_quad (TrackerSparql  *sparql,
        return TRUE;
 }
 
+static gboolean
+tracker_sparql_apply_quad (TrackerSparql  *sparql,
+                           GError        **error)
+{
+       GError *inner_error = NULL;
+
+       switch (sparql->current_state.type) {
+       case TRACKER_SPARQL_TYPE_SELECT:
+               _add_quad (sparql,
+                          &sparql->current_state.graph,
+                          &sparql->current_state.subject,
+                          &sparql->current_state.predicate,
+                          &sparql->current_state.object,
+                          &inner_error);
+               break;
+       case TRACKER_SPARQL_TYPE_INSERT:
+               tracker_data_insert_statement (tracker_data_manager_get_data (sparql->data_manager),
+                                              tracker_token_get_idstring (&sparql->current_state.graph),
+                                              tracker_token_get_idstring (&sparql->current_state.subject),
+                                              tracker_token_get_idstring (&sparql->current_state.predicate),
+                                              tracker_token_get_idstring (&sparql->current_state.object),
+                                              &inner_error);
+               break;
+       case TRACKER_SPARQL_TYPE_DELETE:
+               tracker_data_delete_statement (tracker_data_manager_get_data (sparql->data_manager),
+                                              tracker_token_get_idstring (&sparql->current_state.graph),
+                                              tracker_token_get_idstring (&sparql->current_state.subject),
+                                              tracker_token_get_idstring (&sparql->current_state.predicate),
+                                              tracker_token_get_idstring (&sparql->current_state.object),
+                                              &inner_error);
+               break;
+       case TRACKER_SPARQL_TYPE_UPDATE:
+               tracker_data_update_statement (tracker_data_manager_get_data (sparql->data_manager),
+                                              tracker_token_get_idstring (&sparql->current_state.graph),
+                                              tracker_token_get_idstring (&sparql->current_state.subject),
+                                              tracker_token_get_idstring (&sparql->current_state.predicate),
+                                              tracker_token_get_idstring (&sparql->current_state.object),
+                                              &inner_error);
+               break;
+       default:
+               g_assert_not_reached ();
+       }
+
+       if (inner_error) {
+               g_propagate_error (error, inner_error);
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
 static TrackerParserNode *
 _skip_rule (TrackerSparql *sparql,
             guint          named_rule)
@@ -5010,42 +5061,8 @@ translate_GraphNode (TrackerSparql  *sparql,
             sparql->current_state.type != TRACKER_SPARQL_TYPE_UPDATE))
                return TRUE;
 
-       switch (sparql->current_state.type) {
-       case TRACKER_SPARQL_TYPE_SELECT:
-               _add_quad (sparql,
-                          &sparql->current_state.graph,
-                          &sparql->current_state.subject,
-                          &sparql->current_state.predicate,
-                          &sparql->current_state.object,
-                          &inner_error);
-               break;
-       case TRACKER_SPARQL_TYPE_INSERT:
-               tracker_data_insert_statement (tracker_data_manager_get_data (sparql->data_manager),
-                                              tracker_token_get_idstring (&sparql->current_state.graph),
-                                              tracker_token_get_idstring (&sparql->current_state.subject),
-                                              tracker_token_get_idstring (&sparql->current_state.predicate),
-                                              tracker_token_get_idstring (&sparql->current_state.object),
-                                              &inner_error);
-               break;
-       case TRACKER_SPARQL_TYPE_DELETE:
-               tracker_data_delete_statement (tracker_data_manager_get_data (sparql->data_manager),
-                                              tracker_token_get_idstring (&sparql->current_state.graph),
-                                              tracker_token_get_idstring (&sparql->current_state.subject),
-                                              tracker_token_get_idstring (&sparql->current_state.predicate),
-                                              tracker_token_get_idstring (&sparql->current_state.object),
-                                              &inner_error);
-               break;
-       case TRACKER_SPARQL_TYPE_UPDATE:
-               tracker_data_update_statement (tracker_data_manager_get_data (sparql->data_manager),
-                                              tracker_token_get_idstring (&sparql->current_state.graph),
-                                              tracker_token_get_idstring (&sparql->current_state.subject),
-                                              tracker_token_get_idstring (&sparql->current_state.predicate),
-                                              tracker_token_get_idstring (&sparql->current_state.object),
-                                              &inner_error);
-               break;
-       default:
-               g_assert_not_reached ();
-       }
+       if (!tracker_sparql_apply_quad (sparql, error))
+               return FALSE;
 
        tracker_token_unset (&sparql->current_state.object);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]