tracker: Fix query builder for graphed statements
authorJens Georg <mail@jensge.org>
Thu, 20 Oct 2011 09:49:55 +0000 (11:49 +0200)
committerJens Georg <mail@jensge.org>
Tue, 25 Oct 2011 10:36:24 +0000 (12:36 +0200)
src/plugins/tracker/rygel-tracker-query-triplet.vala
src/plugins/tracker/rygel-tracker-query-triplets.vala

index d81041e..fa7d477 100644 (file)
@@ -59,6 +59,7 @@ public class Rygel.Tracker.QueryTriplet {
     }
 
     public QueryTriplet.clone (QueryTriplet triplet) {
+        this.graph = triplet.graph;
         this.subject = triplet.subject;
         this.predicate = triplet.predicate;
 
@@ -78,7 +79,8 @@ public class Rygel.Tracker.QueryTriplet {
             chain_equal = a.next == b.next;
         }
 
-        return a.subject == b.subject &&
+        return a.graph == b.graph &&
+               a.subject == b.subject &&
                a.obj == b.obj &&
                a.predicate == b.predicate &&
                chain_equal;
@@ -87,10 +89,6 @@ public class Rygel.Tracker.QueryTriplet {
     public string to_string (bool include_subject = true) {
         string str = "";
 
-        if (graph != null) {
-            str += "GRAPH <%s> {".printf (this.graph);
-        }
-
         if (include_subject) {
             str += " " + subject;
         }
@@ -103,10 +101,6 @@ public class Rygel.Tracker.QueryTriplet {
             str += " " + this.obj;
         }
 
-        if (graph != null) {
-            str += "}";
-        }
-
         return str;
     }
 }
index 587919e..e8192ac 100644 (file)
@@ -43,6 +43,10 @@ public class Rygel.Tracker.QueryTriplets : ArrayList<QueryTriplet> {
         var include_subject = true;
 
         for (int i = 0; i < this.size; i++) {
+            if (this[i].graph != null && include_subject) {
+                str += "GRAPH <%s> {".printf (this[i].graph);
+            }
+
             str += this[i].to_string (include_subject);
 
             if (i < this.size - 1) {
@@ -51,9 +55,18 @@ public class Rygel.Tracker.QueryTriplets : ArrayList<QueryTriplet> {
 
                 if (include_subject) {
                     str += " . ";
+                    // close the graph if we change the subject
+                    if (this[i].graph != null) {
+                        str += "} ";
+                    }
                 } else {
                     str += " ; ";
                 }
+            } else {
+                // need to explicitly close the graph for the last triplet
+                if (this[i].graph != null) {
+                    str += " . } ";
+                }
             }
         }