[tracker] libtracker-data: Refine BIND() variable mapping
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] libtracker-data: Refine BIND() variable mapping
- Date: Sat, 4 Jun 2016 22:58:03 +0000 (UTC)
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]