summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-11-17 15:32:37 +0100
committerCarlos Garnacho <carlosg@gnome.org>2018-11-17 16:28:53 +0100
commit9d99c8a46ad4c18de9250476e9145701060f42a1 (patch)
treea2b2f32221280a11c1a20e8fe805c58cb626514b
parentbc935d439c07b22cfff1d25b0fc28d34bc26b110 (diff)
downloadtracker-9d99c8a46ad4c18de9250476e9145701060f42a1.tar.gz
libtracker-data: Add builtin way to convert a Expression to a string
The Expression element may be used in several places (eg. ArgList or ExpressionList in functions) that may require them to be converted to string, add a builtin toggle in the state so this can ben done easily.
-rw-r--r--src/libtracker-data/tracker-sparql.c20
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;
}