From 2181b1425ce5acd7dd491a8ec60b51153c0580c3 Mon Sep 17 00:00:00 2001 From: "terry%mozilla.org" <> Date: Sun, 23 Jan 2000 01:50:00 +0000 Subject: Patch by Christine Begle >, with heavy modifications by me -- let you query for "any words" and "all words", as well as the existing substring and regexp stuff. --- buglist.cgi | 37 ++++++++++++++++++++++++++++++++----- query.cgi | 2 ++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/buglist.cgi b/buglist.cgi index 7b53b9a15..6f791a6df 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -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", "status_whiteboard") { if (defined $::FORM{$f}) { my $s = trim($::FORM{$f}); if ($s ne "") { my $n = $f; - $s = SqlQuote($s); + my $q = SqlQuote($s); my $type = $::FORM{$f . "_type"}; if ($f eq "long_desc") { # Patch in the longdescs table. @@ -490,13 +513,17 @@ foreach my $f ("short_desc", "long_desc", "bug_file_loc", $n = "longdescs.thetext"; } if ($type eq "regexp") { - $query .= "and $n regexp $s\n"; + $query .= "and $n regexp $q\n"; } elsif ($type eq "notregexp") { - $query .= "and $n not regexp $s\n"; + $query .= "and $n not regexp $q\n"; } 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 { - $query .= "and instr(lower($n), lower($s))\n"; + $query .= "and instr(lower($n), lower($q))\n"; } } } diff --git a/query.cgi b/query.cgi index 092c5b306..f8728e9c9 100755 --- a/query.cgi +++ b/query.cgi @@ -511,6 +511,8 @@ sub StringSearch { } foreach my $i (["substring", "case-insensitive substring"], ["casesubstring", "case-sensitive substring"], + ["allwords", "all words"], + ["anywords", "any words"], ["regexp", "regular expression"], ["notregexp", "not ( regular expression )"]) { my ($n, $d) = (@$i); -- cgit v1.2.3-24-g4f1b