[tracker] libtracker-data: Refine BIND() variable mapping



commit 4e5cc9b8bc38d110fc6af5d59e133c768b80ba6b
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun May 29 21:19:43 2016 +0200

    libtracker-data: Refine BIND() variable mapping
    
    The implementation of BIND() introduced an special case in the way we
    construct the result columns in selects (Handled in commit 64b54a7784).
    This special case however turns out wrong when the resolved variable
    is used both in and outside the BIND() statement.
    
    So, admit the nature of this hack and special case it altogether, the
    check was too iffy when there is really one situation where this makes
    sense.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=766505

 src/libtracker-data/tracker-sparql-expression.vala |    2 +-
 src/libtracker-data/tracker-sparql-pattern.vala    |    2 ++
 src/libtracker-data/tracker-sparql-query.vala      |    1 +
 3 files changed, 4 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-expression.vala 
b/src/libtracker-data/tracker-sparql-expression.vala
index 85dd594..aca536d 100644
--- a/src/libtracker-data/tracker-sparql-expression.vala
+++ b/src/libtracker-data/tracker-sparql-expression.vala
@@ -1145,7 +1145,7 @@ class Tracker.Sparql.Expression : Object {
                        string variable_name = get_last_string ().substring (1);
                        var variable = context.get_variable (variable_name);
 
-                       if (context == variable.origin_context && variable.binding != null) {
+                       if (context.in_bind && variable.binding != null) {
                                sql.append (variable.binding.sql_expression);
                        } else {
                                sql.append (variable.sql_expression);
diff --git a/src/libtracker-data/tracker-sparql-pattern.vala b/src/libtracker-data/tracker-sparql-pattern.vala
index 73740b7..e6a209d 100644
--- a/src/libtracker-data/tracker-sparql-pattern.vala
+++ b/src/libtracker-data/tracker-sparql-pattern.vala
@@ -1108,7 +1108,9 @@ class Tracker.Sparql.Pattern : Object {
 
                                expect (SparqlTokenType.OPEN_PARENS);
 
+                               context.in_bind = true;
                                expression.translate_expression (bind_sql);
+                               context.in_bind = false;
                                binding.sql_expression = bind_sql.str;
 
                                expect (SparqlTokenType.AS);
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index 1b0842f..e2166fc 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -122,6 +122,7 @@ namespace Tracker.Sparql {
                public HashTable<Variable,PredicateVariable> predicate_variable_map;
 
                public bool scalar_subquery;
+               public bool in_bind;
 
                public Context (Query query, Context? parent_context = null) {
                        this.query = query;


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