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



commit 0fb463bb54af79cd45091d1a74d80d151603e0aa
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 0a8c892b1..d4a21c779 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]