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



commit b55146898d13ad5b6af9a5f7ce384139d62e0a43
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, 52 insertions(+), 37 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index e05df5b30..8e911b05e 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)
@@ -4930,43 +4981,7 @@ 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 ();
-       }
-
+       tracker_sparql_apply_quad (sparql, error);
        tracker_token_unset (&sparql->current_state.object);
 
        if (inner_error && !sparql->silent) {


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