[tracker/wip/carlosg/fix-tracker-search: 8/11] libtracker-data: Add builtin way to convert a Expression to a string



commit 9d99c8a46ad4c18de9250476e9145701060f42a1
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Nov 17 15:32:37 2018 +0100

    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.

 src/libtracker-data/tracker-sparql.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
---
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;
 
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]