[tracker/wip/carlosg/sparql1.1: 39/113] libtracker-data: Shuffle TrackerContext creation in queries to single place



commit fbe1770caffdabf2c686b18b5081dcd37c53a801
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Jun 13 11:30:43 2019 +0200

    libtracker-data: Shuffle TrackerContext creation in queries to single place
    
    All types of Query are doing this, plus we need the context to remain
    valid when handling the ValuesClause that might go after any of them.

 src/libtracker-data/tracker-sparql.c | 22 ++++++----------------
 1 file changed, 6 insertions(+), 16 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index e5ff3cfd7..16f16c64f 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -1642,6 +1642,10 @@ translate_Query (TrackerSparql  *sparql,
 {
        TrackerGrammarNamedRule rule;
 
+       sparql->context = g_object_ref_sink (tracker_select_context_new ());
+       sparql->current_state.select_context = sparql->context;
+       tracker_sparql_push_context (sparql, sparql->context);
+
        /* Query ::= Prologue
         *           ( SelectQuery | ConstructQuery | DescribeQuery | AskQuery )
         *           ValuesClause
@@ -1663,6 +1667,8 @@ translate_Query (TrackerSparql  *sparql,
 
        _call_rule (sparql, NAMED_RULE_ValuesClause, error);
 
+       tracker_sparql_pop_context (sparql, FALSE);
+
        return TRUE;
 }
 
@@ -1974,9 +1980,6 @@ translate_SelectQuery (TrackerSparql  *sparql,
 
        /* SelectQuery ::= SelectClause DatasetClause* WhereClause SolutionModifier
         */
-       sparql->context = g_object_ref_sink (tracker_select_context_new ());
-       sparql->current_state.select_context = sparql->context;
-       tracker_sparql_push_context (sparql, sparql->context);
 
        /* Skip select clause here */
        str = _append_placeholder (sparql);
@@ -1999,8 +2002,6 @@ translate_SelectQuery (TrackerSparql  *sparql,
 
        _call_rule (sparql, NAMED_RULE_SolutionModifier, error);
 
-       tracker_sparql_pop_context (sparql, FALSE);
-
        return TRUE;
 }
 
@@ -2060,10 +2061,6 @@ translate_DescribeQuery (TrackerSparql  *sparql,
 
        /* DescribeQuery ::= 'DESCRIBE' ( VarOrIri+ | '*' ) DatasetClause* WhereClause? SolutionModifier
         */
-       sparql->context = g_object_ref_sink (tracker_select_context_new ());
-       sparql->current_state.select_context = sparql->context;
-       tracker_sparql_push_context (sparql, sparql->context);
-
        _expect (sparql, RULE_TYPE_LITERAL, LITERAL_DESCRIBE);
        _append_string (sparql,
                        "SELECT "
@@ -2169,7 +2166,6 @@ translate_DescribeQuery (TrackerSparql  *sparql,
        }
 
        _call_rule (sparql, NAMED_RULE_SolutionModifier, error);
-       tracker_sparql_pop_context (sparql, FALSE);
        _append_string (sparql, ") ");
        g_list_free_full (resources, g_object_unref);
        g_clear_pointer (&where_str, tracker_string_builder_free);
@@ -2185,10 +2181,6 @@ translate_AskQuery (TrackerSparql  *sparql,
         */
        _expect (sparql, RULE_TYPE_LITERAL, LITERAL_ASK);
 
-       sparql->context = g_object_ref_sink (tracker_select_context_new ());
-       sparql->current_state.select_context = sparql->context;
-       tracker_sparql_push_context (sparql, sparql->context);
-
        _append_string (sparql, "SELECT CASE EXISTS (SELECT 1 ");
 
        while (_check_in_rule (sparql, NAMED_RULE_DatasetClause)) {
@@ -2198,8 +2190,6 @@ translate_AskQuery (TrackerSparql  *sparql,
        _call_rule (sparql, NAMED_RULE_WhereClause, error);
        _call_rule (sparql, NAMED_RULE_SolutionModifier, error);
 
-       tracker_sparql_pop_context (sparql, FALSE);
-
        _append_string (sparql, ") WHEN 1 THEN 'true' WHEN 0 THEN 'false' ELSE NULL END");
 
        return TRUE;


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