diff --git a/FAQ.md b/FAQ.md index 2ff91fd162..183774cba8 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1146,8 +1146,7 @@ This will result in searching like this: ("apple" AND "banana" AND NOT "cherry") OR "nuts" ``` -Search expressions can be used for searching on the device via the search index and for searching on the email server, -but not for searching on the device without search index for performance reasons. +Search expressions can be used for searching on the email server only, and not for searching on the device. Since version 1.1733 it is possible to save searches, which means that a named entry in the navigation menu will be created to repeat the same search later. You can save a search after searching by tapping on the save button in the top action bar. diff --git a/app/src/main/java/eu/faircode/email/Fts4DbHelper.java b/app/src/main/java/eu/faircode/email/Fts4DbHelper.java index 643ee399b4..2d9f4c9cca 100644 --- a/app/src/main/java/eu/faircode/email/Fts4DbHelper.java +++ b/app/src/main/java/eu/faircode/email/Fts4DbHelper.java @@ -189,62 +189,7 @@ public class Fts4DbHelper extends SQLiteOpenHelper { Long account, Long folder, long[] exclude, BoundaryCallbackMessages.SearchCriteria criteria) { - String query = breakText(criteria.query); - - List word = new ArrayList<>(); - List plus = new ArrayList<>(); - List minus = new ArrayList<>(); - List opt = new ArrayList<>(); - StringBuilder all = new StringBuilder(); - for (String w : query.split("\\s+")) { - if (all.length() > 0) - all.append(' '); - - if (w.length() > 1 && w.startsWith("+")) { - plus.add(w.substring(1)); - all.append(w.substring(1)); - } else if (w.length() > 1 && w.startsWith("-")) { - minus.add(w.substring(1)); - all.append(w.substring(1)); - } else if (w.length() > 1 && w.startsWith("?")) { - opt.add(w.substring(1)); - all.append(w.substring(1)); - } else { - word.add(w); - all.append(w); - } - } - - StringBuilder sb = new StringBuilder(); - if (plus.size() + minus.size() + opt.size() > 0) { - if (word.size() > 0) - sb.append(escape(TextUtils.join(" ", word))); - - for (String p : plus) { - if (sb.length() > 0) - sb.append(" AND "); - sb.append(escape(p)); - } - - for (String m : minus) { - if (sb.length() > 0) - sb.append(" NOT "); - sb.append(escape(m)); - } - - if (sb.length() > 0) { - sb.insert(0, '('); - sb.append(')'); - } - - for (String o : opt) { - if (sb.length() > 0) - sb.append(" OR "); - sb.append(escape(o)); - } - } - - String search = (sb.length() > 0 ? sb.toString() : escape(query)); + String search = escape(breakText(criteria.query)); String select = ""; if (account != null) @@ -280,7 +225,7 @@ public class Fts4DbHelper extends SQLiteOpenHelper { } private static String escape(String word) { - return "\"" + word.replaceAll("\"", "\"\"") + "\""; + return "'" + word.replaceAll("'", "''") + "'"; } static Cursor getIds(SQLiteDatabase db) {