Commit 35f99bbe authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

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
parent 8f04aae6
......@@ -615,7 +615,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|lessthaneq|greaterthan|greaterthaneq|equals|notequals),(?:-|\\+)?(?:\\d+)(?:[dDwWmMyY])\$" => \&_timestamp_compare,
"^commenter,(?:equals|anyexact),(%\\w+%)" => \&_commenter_exact,
......@@ -660,6 +660,7 @@ sub init {
",lessthan" => \&_lessthan,
",lessthaneq" => \&_lessthaneq,
",matches" => sub { ThrowUserError("search_content_without_matches"); },
",notmatches" => sub { ThrowUserError("search_content_without_matches"); },
",greaterthan" => \&_greaterthan,
",greaterthaneq" => \&_greaterthaneq,
",anyexact" => \&_anyexact,
......@@ -1420,8 +1421,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
......@@ -1448,19 +1449,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;
}
......
......@@ -524,19 +524,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
......
......@@ -422,9 +422,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.
......
......@@ -49,6 +49,7 @@
"changedto" => "changed to",
"changedby" => "changed by",
"matches" => "matches",
"notmatches" => "does not match",
} %]
[% field_types = { ${constants.FIELD_TYPE_UNKNOWN} => "Unknown Type",
......
......@@ -85,7 +85,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 %]
......
......@@ -46,6 +46,7 @@
"changedto",
"changedby",
"matches",
"notmatches",
] %]
<h3 id="chart">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment