summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2023-03-20 11:20:56 +0100
committerCarlos Garnacho <carlosg@gnome.org>2023-03-20 16:34:50 +0100
commit4216d7d1fbe44eeb81f73eac63d32b64cdf46ed3 (patch)
tree88f989f60d4b702697b19b1a72b3aa32e1f7f722
parent4e0c7c752728943223671677e2667cdbad0adbde (diff)
downloadtracker-4216d7d1fbe44eeb81f73eac63d32b64cdf46ed3.tar.gz
core: Handle FTS search terms individually
Commit da9eb9a07c hid the internal FTS syntax as an implementation detail, but it did so by making the full search string a single term, so multiple input words had to also appear consecutively in the searched text to be considered a match. Bring back the flexibility in order/distance of the looked up words by using a SQLite helper function to split FTS search terms. This still results in the FTS syntax being hidden away, but splits the input words so that each becomes its own search term. Fixes: da9eb9a07c ("libtracker-data: Do not expose FTS5 syntax through fts:match")
-rw-r--r--src/libtracker-sparql/core/tracker-sparql.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/libtracker-sparql/core/tracker-sparql.c b/src/libtracker-sparql/core/tracker-sparql.c
index 500a9af44..745ed46b3 100644
--- a/src/libtracker-sparql/core/tracker-sparql.c
+++ b/src/libtracker-sparql/core/tracker-sparql.c
@@ -1711,11 +1711,11 @@ tracker_sparql_add_fts_subquery (TrackerSparql *sparql,
if (tracker_sparql_find_graph (sparql, tracker_token_get_idstring (graph))) {
_append_string_printf (sparql,
"%s FROM \"%s\".\"fts5\" "
- "WHERE fts5 = '\"' || REPLACE (",
+ "WHERE fts5 = SparqlFtsTokenize(",
select_items->str,
tracker_token_get_idstring (graph));
_append_literal_sql (sparql, binding);
- _append_string (sparql, ", '\"', ' ') || '\"*'");
+ _append_string (sparql, ") || '*' ");
} else {
_append_empty_select (sparql, n_properties);
}
@@ -1727,10 +1727,10 @@ tracker_sparql_add_fts_subquery (TrackerSparql *sparql,
if (!sparql->policy.filter_unnamed_graph) {
_append_string_printf (sparql,
"%s, 0 FROM \"main\".\"fts5\" "
- "WHERE fts5 = '\"' || REPLACE (",
+ "WHERE fts5 = SparqlFtsTokenize(",
select_items->str);
_append_literal_sql (sparql, binding);
- _append_string (sparql, ", '\"', ' ') || '\"*'");
+ _append_string (sparql, ") || '*' ");
} else {
_append_empty_select (sparql, n_properties);
}
@@ -1744,12 +1744,12 @@ tracker_sparql_add_fts_subquery (TrackerSparql *sparql,
_append_string_printf (sparql,
"UNION ALL %s, %" G_GINT64_FORMAT " AS graph "
"FROM \"%s\".\"fts5\" "
- "WHERE fts5 = '\"' || REPLACE (",
+ "WHERE fts5 = SparqlFtsTokenize(",
select_items->str,
*graph_id,
(gchar *) graph_name);
_append_literal_sql (sparql, binding);
- _append_string (sparql, ", '\"', ' ') || '\"*'");
+ _append_string (sparql, ") || '*' ");
}
g_hash_table_unref (graphs);