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



commit a69d867e95d8766595737a12789d391ef64914be
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 14b538813..d2fdc0ac9 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]