aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/Search/ClauseGroup.pm')
-rw-r--r--Bugzilla/Search/ClauseGroup.pm131
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;