diff options
Diffstat (limited to 'Bugzilla/Search/ClauseGroup.pm')
-rw-r--r-- | Bugzilla/Search/ClauseGroup.pm | 131 |
1 files changed, 68 insertions, 63 deletions
diff --git a/Bugzilla/Search/ClauseGroup.pm b/Bugzilla/Search/ClauseGroup.pm index 590c737fa..5c7791734 100644 --- a/Bugzilla/Search/ClauseGroup.pm +++ b/Bugzilla/Search/ClauseGroup.pm @@ -19,83 +19,88 @@ use Bugzilla::Util qw(trick_taint); use List::MoreUtils qw(uniq); use constant UNSUPPORTED_FIELDS => qw( - attach_data.thedata - classification - commenter - component - longdescs.count - product - owner_idle_time + attach_data.thedata + classification + commenter + component + longdescs.count + product + owner_idle_time ); sub new { - my ($class) = @_; - my $self = bless({ joiner => 'AND' }, $class); - # Add a join back to the bugs table which will be used to group conditions - # for this clause - my $condition = Bugzilla::Search::Condition->new({}); - $condition->translated({ - joins => [{ - table => 'bugs', - as => 'bugs_g0', - from => 'bug_id', - to => 'bug_id', - extra => [], - }], - term => '1 = 1', - }); - $self->SUPER::add($condition); - $self->{group_condition} = $condition; - return $self; + my ($class) = @_; + my $self = bless({joiner => 'AND'}, $class); + + # Add a join back to the bugs table which will be used to group conditions + # for this clause + my $condition = Bugzilla::Search::Condition->new({}); + $condition->translated({ + joins => [{ + table => 'bugs', + as => 'bugs_g0', + from => 'bug_id', + to => 'bug_id', + extra => [], + }], + term => '1 = 1', + }); + $self->SUPER::add($condition); + $self->{group_condition} = $condition; + return $self; } sub add { - my ($self, @args) = @_; - my $field = scalar(@args) == 3 ? $args[0] : $args[0]->{field}; - - # We don't support nesting of conditions under this clause - if (scalar(@args) == 1 && !$args[0]->isa('Bugzilla::Search::Condition')) { - ThrowUserError('search_grouped_invalid_nesting'); - } - - # Ensure all conditions use the same field - if (!$self->{_field}) { - $self->{_field} = $field; - } elsif ($field ne $self->{_field}) { - ThrowUserError('search_grouped_field_mismatch'); - } - - # Unsupported fields - if (grep { $_ eq $field } UNSUPPORTED_FIELDS ) { - # XXX - Hack till bug 916882 is fixed. - my $operator = scalar(@args) == 3 ? $args[1] : $args[0]->{operator}; - ThrowUserError('search_grouped_field_invalid', { field => $field }) - unless (($field eq 'product' || $field eq 'component') && $operator =~ /^changed/); - } - - $self->SUPER::add(@args); + my ($self, @args) = @_; + my $field = scalar(@args) == 3 ? $args[0] : $args[0]->{field}; + + # We don't support nesting of conditions under this clause + if (scalar(@args) == 1 && !$args[0]->isa('Bugzilla::Search::Condition')) { + ThrowUserError('search_grouped_invalid_nesting'); + } + + # Ensure all conditions use the same field + if (!$self->{_field}) { + $self->{_field} = $field; + } + elsif ($field ne $self->{_field}) { + ThrowUserError('search_grouped_field_mismatch'); + } + + # Unsupported fields + if (grep { $_ eq $field } UNSUPPORTED_FIELDS) { + + # XXX - Hack till bug 916882 is fixed. + my $operator = scalar(@args) == 3 ? $args[1] : $args[0]->{operator}; + ThrowUserError('search_grouped_field_invalid', {field => $field}) + unless (($field eq 'product' || $field eq 'component') + && $operator =~ /^changed/); + } + + $self->SUPER::add(@args); } sub update_search_args { - my ($self, $search_args) = @_; + my ($self, $search_args) = @_; - # No need to change things if there's only one child condition - return unless scalar(@{ $self->children }) > 1; + # No need to change things if there's only one child condition + return unless scalar(@{$self->children}) > 1; - # we want all the terms to use the same join table - if (!exists $self->{_first_chart_id}) { - $self->{_first_chart_id} = $search_args->{chart_id}; - } else { - $search_args->{chart_id} = $self->{_first_chart_id}; - } + # we want all the terms to use the same join table + if (!exists $self->{_first_chart_id}) { + $self->{_first_chart_id} = $search_args->{chart_id}; + } + else { + $search_args->{chart_id} = $self->{_first_chart_id}; + } - my $suffix = '_g' . $self->{_first_chart_id}; - $self->{group_condition}->{translated}->{joins}->[0]->{as} = "bugs$suffix"; + my $suffix = '_g' . $self->{_first_chart_id}; + $self->{group_condition}->{translated}->{joins}->[0]->{as} = "bugs$suffix"; - $search_args->{full_field} =~ s/^bugs\./bugs$suffix\./; + $search_args->{full_field} =~ s/^bugs\./bugs$suffix\./; - $search_args->{table_suffix} = $suffix; - $search_args->{bugs_table} = "bugs$suffix"; + $search_args->{table_suffix} = $suffix; + $search_args->{bugs_table} = "bugs$suffix"; } 1; |