From e3031953e40b4fe067d566ac6c403127d7b6c266 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Wed, 2 Sep 2020 17:27:22 +0200 Subject: search: Remove special characters from FTS searches This fixes warnings that would appear of this form: ** (org.gnome.Nautilus:662563): WARNING **: 17:11:13.712: Provider NautilusSearchEngineTracker failed with error fts5: syntax error near "." --- src/nautilus-search-engine-tracker.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/nautilus-search-engine-tracker.c b/src/nautilus-search-engine-tracker.c index 44f4a9cf6..dde3cab26 100644 --- a/src/nautilus-search-engine-tracker.c +++ b/src/nautilus-search-engine-tracker.c @@ -294,6 +294,31 @@ search_finished_idle (gpointer user_data) */ #define FILENAME_RANK "5.0" +static gchar * +filter_alnum_strdup (gchar *string) +{ + GString *filtered; + gchar *c; + + filtered = g_string_new (""); + for (c = string; *c; c = g_utf8_next_char (c)) + { + gunichar uc; + + uc = g_utf8_get_char (c); + if (g_unichar_isalnum (uc)) + { + g_string_append_unichar (filtered, uc); + } + else + { + g_string_append_c (filtered, ' '); + } + } + + return g_string_free (filtered, FALSE); +} + static void nautilus_search_engine_tracker_start (NautilusSearchProvider *provider) { @@ -371,13 +396,16 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider) if (tracker->fts_enabled) { /* Use fts:match only for content search to not lose some filename results due to stop words. */ + g_autofree gchar *filtered_search_text; + + filtered_search_text = filter_alnum_strdup (search_text); g_string_append_printf (sparql, " { " " ?content nie:isStoredAs ?file ." " ?content fts:match \"%s*\" ." " BIND(fts:rank(?content) AS ?rank1) ." " } UNION", - search_text); + filtered_search_text); } g_string_append_printf (sparql, -- cgit v1.2.1