"^component,(?!changed)" => \&_component_nonchanged,
"^product,(?!changed)" => \&_product_nonchanged,
"^classification,(?!changed)" => \&_classification_nonchanged,
- "^keywords,(?:equals|notequals|anyexact|anyword|allwords|nowords)" => \&_keywords_exact,
+ "^keywords,(?:equals|anyexact|anyword|allwords)" => \&_keywords_exact,
+ "^keywords,(?:notequals|notregexp|notsubstring|nowords|nowordssubstr)" => \&_multiselect_negative,
"^keywords,(?!changed)" => \&_keywords_nonchanged,
"^dependson,(?!changed)" => \&_dependson_nonchanged,
"^blocked,(?!changed)" => \&_blocked_nonchanged,
my %func_args = @_;
my ($chartid, $v, $ff, $f, $t, $term, $supptables) =
@func_args{qw(chartid v ff f t term supptables)};
-
+
my @list;
my $table = "keywords_$$chartid";
foreach my $value (split(/[\s,]+/, $$v)) {
nowordssubstr => 'anywordssubstr',
);
- my $table = "bug_$$f";
- $$ff = "$table.value";
+ my $table;
+ if ($$f eq 'keywords') {
+ $table = "keywords LEFT JOIN keyworddefs"
+ . " ON keywords.keywordid = keyworddefs.id";
+ $$ff = "keyworddefs.name";
+ }
+ else {
+ $table = "bug_$$f";
+ $$ff = "$table.value";
+ }
$$funcsbykey{",".$map{$$t}}($self, %func_args);
$$term = "bugs.bug_id NOT IN (SELECT bug_id FROM $table WHERE $$term)";