From f366eaeed22bdf54b5927e3b9beaea0ccc87216b Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Fri, 24 Feb 2012 13:40:06 -0500 Subject: [PATCH] Correctly quote regexp-y characters in phrase quoting helper There was one extra character that caused the use of quotemeta() to not actually happen. This broke two things: 1) phrase searching when the phrase had certain special characters in it -- test case: "c++" 2) use of relevance bumps in the same situation Signed-off-by: Mike Rylander --- .../OpenILS/Application/Storage/Driver/Pg/QueryParser.pm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm index 8affc65090..c38f5741e7 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm @@ -28,7 +28,7 @@ sub quote_phrase_value { my $right_anchored = $value =~ m/\$$/; $value =~ s/\^// if $left_anchored; $value =~ s/\$$// if $right_anchored; - $value =~ quotemeta($value); + $value = quotemeta($value); $value = '^' . $value if $left_anchored; $value = "$value\$" if $right_anchored; return $self->quote_value($value); @@ -693,13 +693,13 @@ sub rel_bump { return '' if (!@$only_atoms); if ($bump eq 'first_word') { - return " /* first_word */ COALESCE(NULLIF( (search_normalize(".$node->table_alias.".value) ~ ('^'||search_normalize(".$self->QueryParser->quote_value($only_atoms->[0]->content)."))), FALSE )::INT * $multiplier, 1)"; + return " /* first_word */ COALESCE(NULLIF( (search_normalize(".$node->table_alias.".value) ~ ('^'||search_normalize(".$self->QueryParser->quote_phrase_value($only_atoms->[0]->content)."))), FALSE )::INT * $multiplier, 1)"; } elsif ($bump eq 'full_match') { return " /* full_match */ COALESCE(NULLIF( (search_normalize(".$node->table_alias.".value) ~ ('^'||". - join( "||' '||", map { "search_normalize(".$self->QueryParser->quote_value($_->content).")" } @$only_atoms )."||'\$')), FALSE )::INT * $multiplier, 1)"; + join( "||' '||", map { "search_normalize(".$self->QueryParser->quote_phrase_value($_->content).")" } @$only_atoms )."||'\$')), FALSE )::INT * $multiplier, 1)"; } elsif ($bump eq 'word_order') { return " /* word_order */ COALESCE(NULLIF( (search_normalize(".$node->table_alias.".value) ~ (". - join( "||'.*'||", map { "search_normalize(".$self->QueryParser->quote_value($_->content).")" } @$only_atoms ).")), FALSE )::INT * $multiplier, 1)"; + join( "||'.*'||", map { "search_normalize(".$self->QueryParser->quote_phrase_value($_->content).")" } @$only_atoms ).")), FALSE )::INT * $multiplier, 1)"; } return ''; -- 2.43.2