[tracker/wip/carlosg/fix-tracker-search: 3/4] libtracker-data: Convert coalesced elements to string



commit 4ed7a64b13c23331ce116f332453e66d87adecd2
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Nov 17 15:46:49 2018 +0100

    libtracker-data: Convert coalesced elements to string
    
    Dropping that possibly fixes coalescing of URNs and datetimes with
    other types transparently handled by SQLite. Eg. this broke the
    "tracker search" CLI subcommand, where it uses:
    
      SELECT COALESCE(nie:url(?u), ?u) ...
    
    This resulted in "tracker search foo" returning "(null)" as the
    file uri/urn.
    
    We must translate each Expression to string so that correctly results
    in the URL string being coalesced with the URN string. This is the
    expected result, and a regression compared to the older parser.

 src/libtracker-data/tracker-sparql.c | 4 ++++
 1 file changed, 4 insertions(+)
---
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index 1e903d308..74699cf8a 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -5255,9 +5255,11 @@ handle_custom_function (TrackerSparql  *sparql,
                _append_string (sparql, ") ");
                sparql->current_state.expression_type = TRACKER_PROPERTY_TYPE_STRING;
        } else if (g_str_equal (function, TRACKER_NS "coalesce")) {
+               sparql->current_state.convert_to_string = TRUE;
                _append_string (sparql, "COALESCE (");
                _call_rule (sparql, NAMED_RULE_ArgList, error);
                _append_string (sparql, ") ");
+               sparql->current_state.expression_type = TRACKER_PROPERTY_TYPE_STRING;
        } else if (g_str_equal (function, FTS_NS "rank")) {
                node = _skip_rule (sparql, NAMED_RULE_ArgList);
                variable = find_fts_variable (sparql, node, "ftsRank");
@@ -5738,10 +5740,12 @@ translate_BuiltInCall (TrackerSparql  *sparql,
                tracker_sparql_swap_current_expression_list_separator (sparql, old_sep);
                sparql->current_state.expression_type = TRACKER_PROPERTY_TYPE_STRING;
        } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_COALESCE)) {
+               sparql->current_state.convert_to_string = TRUE;
                _append_string (sparql, "COALESCE ");
                old_sep = tracker_sparql_swap_current_expression_list_separator (sparql, ", ");
                _call_rule (sparql, NAMED_RULE_ExpressionList, error);
                tracker_sparql_swap_current_expression_list_separator (sparql, old_sep);
+               sparql->current_state.expression_type = TRACKER_PROPERTY_TYPE_STRING;
        }
 
        sparql->current_state.convert_to_string = convert_to_string;


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