]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Fix for bug 65190: add comparison type "all words as substrings" and "any words as...
authorjustdave%syndicomm.com <>
Sat, 2 Jun 2001 11:02:13 +0000 (11:02 +0000)
committerjustdave%syndicomm.com <>
Sat, 2 Jun 2001 11:02:13 +0000 (11:02 +0000)
Patch by Andreas Franke <afranke@ags.uni-sb.de>
r= justdave@syndicomm.com

buglist.cgi
query.cgi

index 8bc12b72e8157e494a527b3eff239fc65fab7a7d..b99afefe9ca2dcee1e1ec43f25c91eeb915d39d3 100755 (executable)
@@ -21,6 +21,7 @@
 # Contributor(s): Terry Weissman <terry@mozilla.org>
 #                 Dan Mosedale <dmose@mozilla.org>
 #                 Stephan Niemz  <st.n@gmx.net>
+#                 Andreas Franke <afranke@mathweb.org>
 
 use diagnostics;
 use strict;
@@ -107,6 +108,21 @@ sub GetByWordList {
     return \@list;
 }
 
+#
+# support for "any/all/nowordssubstr" comparison type ("words as substrings")
+#
+sub GetByWordListSubstr {
+    my ($field, $strs) = (@_);
+    my @list;
+
+    foreach my $word (split(/[\s,]+/, $strs)) {
+        if ($word ne "") {
+            push(@list, "INSTR(LOWER($field), " . lc(SqlQuote($word)) . ")");
+        }
+    }
+
+    return \@list;
+}
 
 
 sub Error {
@@ -491,6 +507,18 @@ sub GenerateSQL {
              }
              $term = join(" OR ", @list);
          },
+         ",anywordssubstr" => sub {
+             $term = join(" OR ", @{GetByWordListSubstr($ff, $v)});
+         },
+         ",allwordssubstr" => sub {
+             $term = join(" AND ", @{GetByWordListSubstr($ff, $v)});
+         },
+         ",nowordssubstr" => sub {
+             my @list = @{GetByWordListSubstr($ff, $v)};
+             if (@list) {
+                 $term = "NOT (" . join(" OR ", @list) . ")";
+             }
+         },
          ",anywords" => sub {
              $term = join(" OR ", @{GetByWordList($ff, $v)});
          },
index f9822bd5fe291521b83b5e2e717684967edc95a0..067f760369f057e17b82c940f868c6115541d387 100755 (executable)
--- a/query.cgi
+++ b/query.cgi
@@ -703,10 +703,12 @@ sub StringSearch {
 <td><SELECT NAME=$type>
 };
     if ($default{$type} eq "") {
-        $default{$type} = "substring";
+        $default{$type} = "allwordssubstr";
     }
     foreach my $i (["substring", "case-insensitive substring"],
                    ["casesubstring", "case-sensitive substring"],
+                   ["allwordssubstr", "all words as substrings"],
+                   ["anywordssubstr", "any words as substrings"],
                    ["allwords", "all words"],
                    ["anywords", "any words"],
                    ["regexp", "regular expression"],
@@ -780,6 +782,8 @@ my @types = (
             ["casesubstring", "contains (case-sensitive) substring"],
             ["substring", "contains (case-insensitive) substring"],
             ["notsubstring", "does not contain (case-insensitive) substring"],
+            ["allwordssubstr", "all words as (case-insensitive) substrings"],
+            ["anywordssubstr", "any words as (case-insensitive) substrings"],
             ["regexp", "contains regexp"],
             ["notregexp", "does not contain regexp"],
             ["lessthan", "less than"],