From fa9e616c3f5781a67f07886401ba27aa007a07f3 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Thu, 4 Feb 2016 07:29:00 +1100 Subject: [PATCH] When no keywords to search, use an empty query selection that evaluates to "1". This means that instead of building invalid SQL such as `WHERE (() OR ())` it will build `WHERE((1) OR (1))` which, while non-optimal, is at least valid. Fixes issue #560. --- .../org/fdroid/fdroid/data/AppProvider.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java index 90935ee8e..bb5e57bf6 100644 --- a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java +++ b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java @@ -614,15 +614,14 @@ public class AppProvider extends FDroidProvider { } private AppQuerySelection querySearch(String query) { - final String[] columns = { - getTableName() + ".id", - getTableName() + ".name", - getTableName() + ".summary", - getTableName() + ".description", - }; - - // Remove duplicates, surround in % for wildcard searching + // Put in a Set to remove duplicates final Set keywordSet = new HashSet<>(Arrays.asList(query.split("\\s"))); + + if (keywordSet.size() == 0) { + return new AppQuerySelection(); + } + + // Surround each keyword in % for wildcard searching final String[] keywords = new String[keywordSet.size()]; int iKeyword = 0; for (final String keyword : keywordSet) { @@ -630,6 +629,13 @@ public class AppProvider extends FDroidProvider { iKeyword++; } + final String[] columns = { + getTableName() + ".id", + getTableName() + ".name", + getTableName() + ".summary", + getTableName() + ".description", + }; + // Build selection string and fill out keyword arguments final StringBuilder selection = new StringBuilder(); final String[] selectionKeywords = new String[columns.length * keywords.length];