Bug 554986: Add a "notmatches" search type, which allows the minus sign

operator to start working for bare words in Quicksearch again
r=LpSolit, a=LpSolit


git-svn-id: svn://10.0.0.236/branches/BUGZILLA-3_6-BRANCH@260095 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
mkanat%bugzilla.org 2010-03-29 21:32:58 +00:00
parent dfdab3cdf5
commit c844cced0b
7 changed files with 16 additions and 23 deletions

View File

@ -1 +1 @@
7058
7059

View File

@ -612,7 +612,7 @@ sub init {
"^long_?desc,changedby" => \&_long_desc_changedby,
"^long_?desc,changedbefore" => \&_long_desc_changedbefore_after,
"^long_?desc,changedafter" => \&_long_desc_changedbefore_after,
"^content,matches" => \&_content_matches,
"^content,(?:not)?matches" => \&_content_matches,
"^content," => sub { ThrowUserError("search_content_without_matches"); },
"^(?:deadline|creation_ts|delta_ts),(?:lessthan|greaterthan|equals|notequals),(?:-|\\+)?(?:\\d+)(?:[dDwWmMyY])\$" => \&_timestamp_compare,
"^commenter,(?:equals|anyexact),(%\\w+%)" => \&_commenter_exact,
@ -656,6 +656,7 @@ sub init {
",notregexp" => \&_notregexp,
",lessthan" => \&_lessthan,
",matches" => sub { ThrowUserError("search_content_without_matches"); },
",notmatches" => sub { ThrowUserError("search_content_without_matches"); },
",greaterthan" => \&_greaterthan,
",anyexact" => \&_anyexact,
",anywordssubstr" => \&_anywordsubstr,
@ -1415,8 +1416,8 @@ sub _long_desc_changedbefore_after {
sub _content_matches {
my $self = shift;
my %func_args = @_;
my ($chartid, $supptables, $term, $groupby, $fields, $v) =
@func_args{qw(chartid supptables term groupby fields v)};
my ($chartid, $supptables, $term, $groupby, $fields, $t, $v) =
@func_args{qw(chartid supptables term groupby fields t v)};
my $dbh = Bugzilla->dbh;
# "content" is an alias for columns containing text for which we
@ -1443,19 +1444,21 @@ sub _content_matches {
# The term to use in the WHERE clause.
$$term = "$term1 > 0 OR $term2 > 0";
if ($$t =~ /not/i) {
$$term = "NOT($$term)";
}
# In order to sort by relevance (in case the user requests it),
# we SELECT the relevance value so we can add it to the ORDER BY
# clause. Every time a new fulltext chart isadded, this adds more
# terms to the relevance sql. (That doesn't make sense in
# "NOT" charts, but Bugzilla never uses those with fulltext
# by default.)
# terms to the relevance sql.
#
# We build the relevance SQL by modifying the COLUMNS list directly,
# which is kind of a hack but works.
my $current = COLUMNS->{'relevance'}->{name};
$current = $current ? "$current + " : '';
my $select_term = "($current$rterm1 + $rterm2)";
# For NOT searches, we just add 0 to the relevance.
my $select_term = $$t =~ /not/ ? 0 : "($current$rterm1 + $rterm2)";
COLUMNS->{'relevance'}->{name} = $select_term;
}

View File

@ -569,19 +569,10 @@ sub matchPrefixes {
sub negateComparisonType {
my $comparisonType = shift;
if ($comparisonType eq 'substring') {
return 'notsubstring';
}
elsif ($comparisonType eq 'anywords') {
if ($comparisonType eq 'anywords') {
return 'nowords';
}
elsif ($comparisonType eq 'regexp') {
return 'notregexp';
}
else {
# Don't know how to negate that
ThrowCodeError('unknown_comparison_type');
}
return "not$comparisonType";
}
# Add a boolean chart

View File

@ -431,9 +431,6 @@
An error occurred while preparing for a RADIUS authentication request:
<code>[% errstr FILTER html %]</code>.
[% ELSIF error == "unknown_comparison_type" %]
Specified comparison type is not supported.
[% ELSIF error == "request_queue_group_invalid" %]
The group field <em>[% group FILTER html %]</em> is invalid.

View File

@ -49,6 +49,7 @@
"changedto" => "changed to",
"changedby" => "changed by",
"matches" => "matches",
"notmatches" => "does not match",
} %]
[% field_types = { ${constants.FIELD_TYPE_UNKNOWN} => "Unknown Type",

View File

@ -83,7 +83,7 @@
'notequals', 'regexp', 'notregexp', 'lessthan', 'lessthaneq',
'greaterthan', 'greaterthaneq', 'changedbefore', 'changedafter',
'changedfrom', 'changedto', 'changedby', 'notsubstring', 'nowords',
'nowordssubstr',
'nowordssubstr', 'notmatches',
] %]
<ul class="search_description">
[% FOREACH desc_item = search_description %]

View File

@ -44,6 +44,7 @@
"changedto",
"changedby",
"matches",
"notmatches",
] %]
<p>