summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libtracker-data/tracker-sparql.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index ce33a5ca2..10e04bfd1 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -5196,7 +5196,7 @@ translate_ServiceGraphPattern (TrackerSparql *sparql,
GList *variable_rules = NULL, *l;
GList *join_vars = NULL;
TrackerToken service;
- GString *service_sparql;
+ GString *service_sparql = NULL;
gboolean silent = FALSE, do_join;
gint i = 0;
@@ -5241,7 +5241,6 @@ translate_ServiceGraphPattern (TrackerSparql *sparql,
pattern = _skip_rule (sparql, NAMED_RULE_GroupGraphPattern);
_append_string (sparql, "SELECT ");
- service_sparql = g_string_new ("SELECT ");
variable_rules = extract_variables (sparql, pattern);
@@ -5269,6 +5268,9 @@ translate_ServiceGraphPattern (TrackerSparql *sparql,
if (i > 0)
_append_string (sparql, ", ");
+ if (!service_sparql)
+ service_sparql = g_string_new ("SELECT ");
+
/* Variable was used before in the graph pattern, preserve
* for later so we join on it properly.
*/
@@ -5289,6 +5291,9 @@ translate_ServiceGraphPattern (TrackerSparql *sparql,
i++;
}
+ if (variable_rules == NULL)
+ _append_string (sparql, "* ");
+
if (tracker_token_get_variable (&service)) {
if (variable_rules != NULL)
_append_string (sparql, ", ");
@@ -5298,16 +5303,18 @@ translate_ServiceGraphPattern (TrackerSparql *sparql,
join_vars = g_list_prepend (join_vars, tracker_token_get_variable (&service));
}
- tracker_parser_node_get_extents (pattern, &pattern_start, &pattern_end);
- pattern_str = g_strndup (&sparql->sparql[pattern_start], pattern_end - pattern_start);
- escaped_str = _escape_sql_string (pattern_str, '"');
- g_string_append (service_sparql, escaped_str);
- g_list_free (variables);
- g_free (pattern_str);
- g_free (escaped_str);
+ if (service_sparql) {
+ tracker_parser_node_get_extents (pattern, &pattern_start, &pattern_end);
+ pattern_str = g_strndup (&sparql->sparql[pattern_start], pattern_end - pattern_start);
+ escaped_str = _escape_sql_string (pattern_str, '"');
+ g_string_append (service_sparql, escaped_str);
+ g_list_free (variables);
+ g_free (pattern_str);
+ g_free (escaped_str);
+ }
_append_string_printf (sparql, "FROM tracker_service WHERE query=\"%s\" AND silent=%d ",
- service_sparql->str,
+ service_sparql ? service_sparql->str : "",
silent);
if (!tracker_token_get_variable (&service)) {
@@ -5315,6 +5322,9 @@ translate_ServiceGraphPattern (TrackerSparql *sparql,
tracker_token_get_idstring (&service));
}
+ if (service_sparql)
+ g_string_free (service_sparql, TRUE);
+
i = 0;
/* Proxy parameters to the virtual table */
@@ -5344,7 +5354,6 @@ translate_ServiceGraphPattern (TrackerSparql *sparql,
tracker_token_unset (&service);
tracker_sparql_pop_context (sparql, TRUE);
- g_string_free (service_sparql, TRUE);
g_list_free (variable_rules);
if (do_join) {