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



commit 311f947c86df14d5d7b725b0105a9b3881e90b66
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 1627486cd..22ad078dd 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -5256,9 +5256,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");
@@ -5739,10 +5741,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]