From 7eb5ccc5acb4d22a8e5a250236f8f4be779cd05e Mon Sep 17 00:00:00 2001 From: David Cook Date: Fri, 5 Feb 2016 16:09:45 +1100 Subject: [PATCH] Bug 15745 - C4::Matcher gets CCL parsing error if term contains ? (question mark) Signed-off-by: Olli-Antti Kivilahti Also fixes ! and + Rebased to master --- C4/Matcher.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/C4/Matcher.pm b/C4/Matcher.pm index 0dd8782..a59ba67 100644 --- a/C4/Matcher.pm +++ b/C4/Matcher.pm @@ -656,7 +656,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; @@ -812,7 +813,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... } } } -- 1.9.1