From: Max Kanat-Alexander Date: Tue, 15 Feb 2011 05:45:10 +0000 (-0800) Subject: Bug 490322: Make "allwords" work with the keywords field, again. X-Git-Tag: bugzilla-3.6.5~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=80a0dd45efc6a1655a99245729262c6242ad79f3;p=thirdparty%2Fbugzilla.git Bug 490322: Make "allwords" work with the keywords field, again. r=glob, a=mkanat --- diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 4340025a87..c373f974dc 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -1892,33 +1892,26 @@ sub _keywords_exact { my ($chartid, $v, $ff, $f, $t, $term, $supptables) = @func_args{qw(chartid v ff f t term supptables)}; - my @list; + my @keyword_ids; + foreach my $word (split(/[\s,]+/, $$v)) { + next if $word eq ''; + my $keyword = Bugzilla::Keyword->check($word); + push(@keyword_ids, $keyword->id); + } + my $table = "keywords_$$chartid"; - foreach my $value (split(/[\s,]+/, $$v)) { - if ($value eq '') { - next; - } - my $keyword = new Bugzilla::Keyword({name => $value}); - if ($keyword) { - push(@list, "$table.keywordid = " . $keyword->id); - } - else { - ThrowUserError("unknown_keyword", - { keyword => $$v }); - } + my $id_field = "$table.keywordid"; + if ($$t eq 'anywords' or $$t eq 'anyexact') { + my $dbh = Bugzilla->dbh; + $$term = $dbh->sql_in($id_field, \@keyword_ids); } - my $haveawordterm; - if (@list) { - $haveawordterm = "(" . join(' OR ', @list) . ")"; - if ($$t eq "anywords") { - $$term = $haveawordterm; - } elsif ($$t eq "allwords") { - $self->_allwords; - if ($$term && $haveawordterm) { - $$term = "(($$term) AND $haveawordterm)"; - } - } + if ($$t eq 'allwords') { + my @terms = + map { "bugs.bug_id IN (SELECT bug_id FROM keywords WHERE keywordid = $_)" } @keyword_ids; + $$term = join(' AND ', @terms); + return; } + if ($$term) { push(@$supptables, "LEFT JOIN keywords AS $table " . "ON $table.bug_id = bugs.bug_id"); diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl index 5584667302..28bb67d60d 100644 --- a/template/en/default/global/user-error.html.tmpl +++ b/template/en/default/global/user-error.html.tmpl @@ -1811,6 +1811,8 @@ field [% ELSIF class == "Bugzilla::Group" %] group + [% ELSIF class == "Bugzilla::Keyword" %] + keyword [% ELSIF class == "Bugzilla::Product" %] product [% ELSIF class == "Bugzilla::Search::Saved" %]