diff options
Diffstat (limited to 'src/libtracker-data/tracker-sparql.c')
-rw-r--r-- | src/libtracker-data/tracker-sparql.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index 2a0f100ee..e32a4f2b0 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -142,6 +142,8 @@ struct _TrackerSparql const gchar *expression_list_separator; TrackerPropertyType expression_type; guint type; + + gboolean convert_to_string; } current_state; }; @@ -4610,10 +4612,28 @@ static gboolean translate_Expression (TrackerSparql *sparql, GError **error) { + TrackerStringBuilder *str, *old; + gboolean convert_to_string; + /* Expression ::= ConditionalOrExpression */ + convert_to_string = sparql->current_state.convert_to_string; + sparql->current_state.convert_to_string = FALSE; + + if (convert_to_string) { + str = _append_placeholder (sparql); + old = tracker_sparql_swap_builder (sparql, str); + } + _call_rule (sparql, NAMED_RULE_ConditionalOrExpression, error); + if (convert_to_string) { + convert_expression_to_string (sparql, sparql->current_state.expression_type); + tracker_sparql_swap_builder (sparql, old); + } + + sparql->current_state.convert_to_string = convert_to_string; + return TRUE; } |