[tracker] SPARQL: Ignore CONSTRUCT/INSERT/DELETE triples with unbound variables
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] SPARQL: Ignore CONSTRUCT/INSERT/DELETE triples with unbound variables
- Date: Mon, 24 Jan 2011 15:50:29 +0000 (UTC)
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]