Bug 15745: C4::Matcher gets CCL parsing error if term contains ? (question mark)

Signed-off-by: Olli-Antti Kivilahti <olli-antti.kivilahti@jns.fi>

Also fixes ! and +
Rebased to master
Signed-off-by: Tomas Cohen Arazi <tomascohen@unc.edu.ar>
It makes perfect sense and works as expected. This part of the code is too
under-tested so no point requiring a regression test for such a simple change.

Signed-off-by: Brendan A Gallagher <brendan@bywatersolutions.com>
This commit is contained in:
David Cook 2016-02-05 16:09:45 +11:00 committed by Brendan A Gallagher
parent cc4d9822a1
commit fcbd81049f
1 changed files with 3 additions and 2 deletions

View File

@ -651,7 +651,8 @@ sub get_matches {
else {
my $phr = C4::Context->preference('AggressiveMatchOnISBN') ? ',phr' : q{};
$query = join( " or ",
map { "$matchpoint->{'index'}$phr=$_" } @source_keys );
map { "$matchpoint->{'index'}$phr=\"$_\"" } @source_keys );
#NOTE: double-quote the values so you don't get a "Embedded truncation not supported" error when a term has a ? in it.
}
require C4::Search;
@ -807,7 +808,7 @@ sub _get_match_keys {
} else {
foreach my $subfield ($field->subfields()) {
if (exists $component->{'subfields'}->{$subfield->[0]}) {
$string .= " " . $subfield->[1];
$string .= " " . $subfield->[1]; #FIXME: It would be better to create an array and join with a space later...
}
}
}