Commit 4518c70b authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

Bug 578494: When doing a QuickSearch on a phrase, pass the phrase quoted

to the fulltext engine, so that it knows it's a phrase. r=LpSolit, a=mkanat
parent b1fa012b
......@@ -45,6 +45,7 @@ use Bugzilla::DB::Schema;
use List::Util qw(max);
use Storable qw(dclone);
use Text::ParseWords qw(shellwords);
#####################################################################
# Constants
......@@ -383,8 +384,9 @@ sub sql_fulltext_search {
# make the string lowercase to do case insensitive search
my $lower_text = lc($text);
# split the text we search for into separate words
my @words = split(/\s+/, $lower_text);
# split the text we're searching for into separate words, understanding
# quotes.
my @words = shellwords($lower_text);
# surround the words with wildcards and SQL quotes so we can use them
# in LIKE search clauses
......
......@@ -310,7 +310,7 @@ sub _handle_special_first_chars {
if ($firstChar eq '#') {
addChart('short_desc', 'substring', $baseWord, $negate);
addChart('content', 'matches', $baseWord, $negate);
addChart('content', 'matches', _matches_phrase($baseWord), $negate);
return 1;
}
if ($firstChar eq ':') {
......@@ -470,7 +470,7 @@ sub _default_quicksearch_word {
addChart('alias', 'substring', $word, $negate);
addChart('short_desc', 'substring', $word, $negate);
addChart('status_whiteboard', 'substring', $word, $negate);
addChart('content', 'matches', $word, $negate);
addChart('content', 'matches', _matches_phrase($word), $negate);
}
sub _handle_urls {
......@@ -522,6 +522,13 @@ sub splitString {
return @parts;
}
# Quote and escape a phrase appropriately for a "content matches" search.
sub _matches_phrase {
my ($phrase) = @_;
$phrase =~ s/"/\\"/g;
return "\"$phrase\"";
}
# Expand found prefixes to states or resolutions
sub matchPrefixes {
my $hr_states = shift;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment