Fix WHERE clause for keyword search queries with empty keywords

When the keyword parameter is empty, the AND clause has to be omitted,
otherwise we get an SQL syntax error:

... WHERE PackageBases.PackagerUID IS NOT NULL AND () ...

This got broken in commit 9e30013aa4fc6ce3a3c9f6f83a6fe789c1fc2456
Author: Kevin Morris <kevr.gtalk@gmail.com>
Date:   Sun Jul 5 18:19:06 2020 -0700

Support conjunctive keyword search in RPC interface

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
Jakub Klinkovský 2020-09-05 22:15:22 +02:00 committed by Lukas Fleischer
parent 3062a78a92
commit bc972089a1

View file

@ -697,9 +697,7 @@ function pkg_search_page($params, $show_headers=true, $SID="") {
}
elseif (isset($params["SeB"]) && $params["SeB"] == "k") {
/* Search by name. */
$q_where .= "AND (";
$q_where .= construct_keyword_search($dbh, $params['K'], false, true);
$q_where .= ") ";
}
elseif (isset($params["SeB"]) && $params["SeB"] == "N") {
/* Search by name (exact match). */
@ -711,9 +709,7 @@ function pkg_search_page($params, $show_headers=true, $SID="") {
}
else {
/* Keyword search (default). */
$q_where .= "AND (";
$q_where .= construct_keyword_search($dbh, $params['K'], true, true);
$q_where .= ") ";
}
}
@ -885,7 +881,11 @@ function construct_keyword_search($dbh, $keywords, $namedesc, $keyword=false) {
$op = "AND ";
}
return $q_keywords;
if (!empty($q_keywords)) {
$where_part = "AND (" . $q_keywords . ") ";
}
return $where_part;
}
/**