diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala index 35fbb65..d52f2ee 100644 --- a/src/libtracker-data/tracker-sparql-query.vala +++ b/src/libtracker-data/tracker-sparql-query.vala @@ -911,7 +911,7 @@ public class Tracker.SparqlQuery : Object { if (current () == SparqlTokenType.OPTIONAL) { parse_optional_graph_pattern (group_graph_pattern_start); } else if (current () == SparqlTokenType.OPEN_BRACE) { - // parse_group_or_union_graph_pattern (); + parse_group_or_union_graph_pattern (group_graph_pattern_start); } else if (current () == SparqlTokenType.GRAPH) { // parse_graph_graph_pattern (); } @@ -1583,7 +1583,17 @@ public class Tracker.SparqlQuery : Object { } } - void parse_optional_graph_pattern (int group_graph_pattern_start) { + void parse_group_or_union_graph_pattern (int group_graph_pattern_start) throws SparqlError { + visit_group_graph_pattern (); + while (accept (SparqlTokenType.UNION)) { + // not sure pattern_sql.insert (group_graph_pattern_start, "SELECT * FROM ("); + pattern_sql.append (") UNION ALL ("); + visit_group_graph_pattern (); + pattern_sql.append (")"); + } + } + + void parse_optional_graph_pattern (int group_graph_pattern_start) throws SparqlError { expect (SparqlTokenType.OPTIONAL); pattern_sql.insert (group_graph_pattern_start, "SELECT * FROM ("); pattern_sql.append (") NATURAL LEFT JOIN (SELECT * FROM (");