зеркало из https://github.com/mozilla/pjs.git
Patch by Christine Begle <cbegle@mozilla.org>>, with heavy
modifications by me -- let you query for "any words" and "all words", as well as the existing substring and regexp stuff.
This commit is contained in:
Родитель
e05f053bd9
Коммит
61399c39cf
|
@ -475,13 +475,36 @@ if (defined $ref && 0 < @$ref) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub GetByWordList {
|
||||||
|
my ($field, $strs, $verb) = (@_);
|
||||||
|
my @list;
|
||||||
|
|
||||||
|
foreach my $w (split(/[\s,]+/, $strs)) {
|
||||||
|
my $word = $w;
|
||||||
|
if ($word ne "") {
|
||||||
|
$word =~ tr/A-Z/a-z/;
|
||||||
|
$word = SqlQuote(quotemeta($word));
|
||||||
|
$word =~ s/^'//;
|
||||||
|
$word =~ s/'$//;
|
||||||
|
$word = '(^|[^a-z0-9])' . $word . '($|[^a-z0-9])';
|
||||||
|
push(@list, "lower($field) regexp '$word'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == @list) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "and (" . join(" $verb ", @list) . ")\n";
|
||||||
|
}
|
||||||
|
|
||||||
foreach my $f ("short_desc", "long_desc", "bug_file_loc",
|
foreach my $f ("short_desc", "long_desc", "bug_file_loc",
|
||||||
"status_whiteboard") {
|
"status_whiteboard") {
|
||||||
if (defined $::FORM{$f}) {
|
if (defined $::FORM{$f}) {
|
||||||
my $s = trim($::FORM{$f});
|
my $s = trim($::FORM{$f});
|
||||||
if ($s ne "") {
|
if ($s ne "") {
|
||||||
my $n = $f;
|
my $n = $f;
|
||||||
$s = SqlQuote($s);
|
my $q = SqlQuote($s);
|
||||||
my $type = $::FORM{$f . "_type"};
|
my $type = $::FORM{$f . "_type"};
|
||||||
if ($f eq "long_desc") {
|
if ($f eq "long_desc") {
|
||||||
# Patch in the longdescs table.
|
# Patch in the longdescs table.
|
||||||
|
@ -490,13 +513,17 @@ foreach my $f ("short_desc", "long_desc", "bug_file_loc",
|
||||||
$n = "longdescs.thetext";
|
$n = "longdescs.thetext";
|
||||||
}
|
}
|
||||||
if ($type eq "regexp") {
|
if ($type eq "regexp") {
|
||||||
$query .= "and $n regexp $s\n";
|
$query .= "and $n regexp $q\n";
|
||||||
} elsif ($type eq "notregexp") {
|
} elsif ($type eq "notregexp") {
|
||||||
$query .= "and $n not regexp $s\n";
|
$query .= "and $n not regexp $q\n";
|
||||||
} elsif ($type eq "casesubstring") {
|
} elsif ($type eq "casesubstring") {
|
||||||
$query .= "and instr($n, $s)\n";
|
$query .= "and instr($n, $q)\n";
|
||||||
|
} elsif ($type eq "allwords") {
|
||||||
|
$query .= GetByWordList($f, $s, "and");
|
||||||
|
} elsif ($type eq "anywords") {
|
||||||
|
$query .= GetByWordList($f, $s, "or");
|
||||||
} else {
|
} else {
|
||||||
$query .= "and instr(lower($n), lower($s))\n";
|
$query .= "and instr(lower($n), lower($q))\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -511,6 +511,8 @@ sub StringSearch {
|
||||||
}
|
}
|
||||||
foreach my $i (["substring", "case-insensitive substring"],
|
foreach my $i (["substring", "case-insensitive substring"],
|
||||||
["casesubstring", "case-sensitive substring"],
|
["casesubstring", "case-sensitive substring"],
|
||||||
|
["allwords", "all words"],
|
||||||
|
["anywords", "any words"],
|
||||||
["regexp", "regular expression"],
|
["regexp", "regular expression"],
|
||||||
["notregexp", "not ( regular expression )"]) {
|
["notregexp", "not ( regular expression )"]) {
|
||||||
my ($n, $d) = (@$i);
|
my ($n, $d) = (@$i);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче