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:
terry%mozilla.org 2000-01-22 17:50:00 +00:00
Родитель e05f053bd9
Коммит 61399c39cf
2 изменённых файлов: 34 добавлений и 5 удалений

Просмотреть файл

@ -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);