[tracker] SPARQL: Ignore CONSTRUCT/INSERT/DELETE triples with unbound variables



commit 4b186d139688eaba36d92b99f7b99938692a5e19
Author: Jürg Billeter <j bitron ch>
Date:   Mon Jan 24 16:43:44 2011 +0100

    SPARQL: Ignore CONSTRUCT/INSERT/DELETE triples with unbound variables

 src/libtracker-data/tracker-sparql-query.vala |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index 9cdf479..e57adce 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -768,14 +768,11 @@ public class Tracker.Sparql.Query : Object {
 
 	bool anon_blank_node_open = false;
 
-	string parse_construct_var_or_term (HashTable<string,string> var_value_map) throws Sparql.Error, DateError {
+	string? parse_construct_var_or_term (HashTable<string,string> var_value_map) throws Sparql.Error, DateError {
 		string result = "";
 		if (current () == SparqlTokenType.VAR) {
 			next ();
 			result = var_value_map.lookup (get_last_string ().substring (1));
-			if (result == null) {
-				throw get_error ("use of undefined variable `%s'".printf (get_last_string ().substring (1)));
-			}
 		} else if (current () == SparqlTokenType.IRI_REF) {
 			next ();
 			result = get_last_string (1);
@@ -902,6 +899,11 @@ public class Tracker.Sparql.Query : Object {
 
 	void parse_construct_object (HashTable<string,string> var_value_map) throws Sparql.Error, DateError {
 		string object = parse_construct_var_or_term (var_value_map);
+		if (current_subject == null || current_predicate == null || object == null) {
+			// the SPARQL specification says that triples containing unbound variables
+			// should be excluded from the output RDF graph of CONSTRUCT
+			return;
+		}
 		try {
 			if (delete_statements) {
 				// delete triple from database



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