From f0f3cb32889d6f0d64fb4965e8c00a3a1f31c6c9 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 10 Oct 2017 12:18:10 -0300 Subject: [PATCH] Bug 18961: Use exact match for select filters on item search MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The SQL operator LIKE is always used for filters when searching for items. If the filter is a select, we should search for an exact match. That way we avoid problematic search like "%NFIC%" and "%FIC%" (one includes the other one). Test plan: - Make sure you have collection codes 'Fiction' and 'Non-fiction' - Do an item search - Filter column 'Collection', select 'Fiction' - Result: Column contains items from Fiction only Followed test plan, works as expected. Signed-off-by: Marc Véron Signed-off-by: Marcel de Rooy Signed-off-by: Jonathan Druart --- catalogue/itemsearch.pl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/catalogue/itemsearch.pl b/catalogue/itemsearch.pl index c48f2f1aba..369142e1b1 100755 --- a/catalogue/itemsearch.pl +++ b/catalogue/itemsearch.pl @@ -61,9 +61,15 @@ if (defined $format and $format eq 'json') { my @words = split /\s+/, $sSearch; foreach my $word (@words) { push @f, $columns[$i]; - push @q, "%$word%"; - push @op, 'like'; push @c, 'and'; + + if ( grep /^$columns[$i]$/, qw( ccode homebranch holdingbranch location notforloan ) ) { + push @q, "$word"; + push @op, '='; + } else { + push @q, "%$word%"; + push @op, 'like'; + } } } } -- 2.39.5