diff options
author | Frédéric Buclin <LpSolit@gmail.com> | 2014-09-23 01:11:51 +0200 |
---|---|---|
committer | Frédéric Buclin <LpSolit@gmail.com> | 2014-09-23 01:11:51 +0200 |
commit | 1488a5896c2aff13218d9f92e26ea498d7cbb847 (patch) | |
tree | 0e14681efac50c9df5b263bdb69b2d5c493b118d | |
parent | 6b518aa3fe597f9a6d434d18520ed268b91ab220 (diff) | |
download | bugzilla-1488a5896c2aff13218d9f92e26ea498d7cbb847.tar.gz bugzilla-1488a5896c2aff13218d9f92e26ea498d7cbb847.tar.xz |
Bug 1065444: Several columns are not legal when displaying queries
r=dkl a=sgreen
-rw-r--r-- | Bugzilla/Search.pm | 19 | ||||
-rwxr-xr-x | buglist.cgi | 68 |
2 files changed, 46 insertions, 41 deletions
diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 2a13969cc..0395d08ee 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -647,7 +647,6 @@ sub COLUMNS { foreach my $col (@id_fields) { $special_sql{$col} = "map_${col}.name"; - $columns{"${col}_id"}{name} = "bugs.${col}_id"; } # Do the actual column-getting from fielddefs, now. @@ -762,7 +761,7 @@ sub data { my @orig_fields = $self->_input_columns; my $all_in_bugs_table = 1; foreach my $field (@orig_fields) { - next if $self->COLUMNS->{$field}->{name} =~ /^bugs\.\w+$/; + next if ($self->COLUMNS->{$field}->{name} // $field) =~ /^bugs\.\w+$/; $self->{fields} = ['bug_id']; $all_in_bugs_table = 0; last; @@ -1014,10 +1013,16 @@ sub _sql_select { my ($self) = @_; my @sql_fields; foreach my $column ($self->_display_columns) { - my $alias = $column; - # Aliases cannot contain dots in them. We convert them to underscores. - $alias =~ s/\./_/g; - my $sql = $self->COLUMNS->{$column}->{name} . " AS $alias"; + my $sql = $self->COLUMNS->{$column}->{name} // ''; + if ($sql) { + my $alias = $column; + # Aliases cannot contain dots in them. We convert them to underscores. + $alias =~ tr/./_/; + $sql .= " AS $alias"; + } + else { + $sql = $column; + } push(@sql_fields, $sql); } return @sql_fields; @@ -1394,7 +1399,7 @@ sub _sql_group_by { my @extra_group_by; foreach my $column ($self->_select_columns) { next if $self->_skip_group_by->{$column}; - my $sql = $self->COLUMNS->{$column}->{name}; + my $sql = $self->COLUMNS->{$column}->{name} // $column; push(@extra_group_by, $sql); } diff --git a/buglist.cgi b/buglist.cgi index 5106f8dc2..c04c7853f 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -281,6 +281,38 @@ sub GetGroups { return [values %legal_groups]; } +sub _get_common_flag_types { + my $component_ids = shift; + + # Get all the different components in the bug list + my $components = Bugzilla::Component->new_from_list($component_ids); + my %flag_types; + my @flag_types_ids; + foreach my $component (@$components) { + foreach my $flag_type (@{$component->flag_types->{'bug'}}) { + push @flag_types_ids, $flag_type->id; + $flag_types{$flag_type->id} = $flag_type; + } + } + + # We only want flags that appear in all components + my %common_flag_types; + foreach my $id (keys %flag_types) { + my $flag_type_count = scalar grep { $_ == $id } @flag_types_ids; + $common_flag_types{$id} = $flag_types{$id} + if $flag_type_count == scalar @$components; + } + + # We only show flags that a user has request or set rights on + my @show_flag_types + = grep { $user->can_request_flag($_) || $user->can_set_flag($_) } + values %common_flag_types; + my $any_flags_requesteeble = + grep($_->is_requesteeble, @show_flag_types); + + return(\@show_flag_types, $any_flags_requesteeble); +} + ################################################################################ # Command Execution ################################################################################ @@ -510,38 +542,6 @@ if (grep('relevance', @displaycolumns) && !$fulltext) { @displaycolumns = grep($_ ne 'relevance', @displaycolumns); } -sub _get_common_flag_types { - my $component_ids = shift; - - # Get all the different components in the bug list - my $components = Bugzilla::Component->new_from_list($component_ids); - my %flag_types; - my @flag_types_ids; - foreach my $component (@$components) { - foreach my $flag_type (@{$component->flag_types->{'bug'}}) { - push @flag_types_ids, $flag_type->id; - $flag_types{$flag_type->id} = $flag_type; - } - } - - # We only want flags that appear in all components - my %common_flag_types; - foreach my $id (keys %flag_types) { - my $flag_type_count = scalar grep { $_ == $id } @flag_types_ids; - $common_flag_types{$id} = $flag_types{$id} - if $flag_type_count == scalar @$components; - } - - # We only show flags that a user has request or set rights on - my @show_flag_types - = grep { $user->can_request_flag($_) || $user->can_set_flag($_) } - values %common_flag_types; - my $any_flags_requesteeble = - grep($_->is_requesteeble, @show_flag_types); - - return(\@show_flag_types, $any_flags_requesteeble); -} - ################################################################################ # Select Column Determination ################################################################################ @@ -582,7 +582,7 @@ foreach my $col (@displaycolumns) { # has for modifying the bugs. if ($dotweak) { push(@selectcolumns, "bug_status") if !grep($_ eq 'bug_status', @selectcolumns); - push(@selectcolumns, "component_id") if !grep($_ eq 'component_id', @selectcolumns); + push(@selectcolumns, "bugs.component_id"); } if ($format->{'extension'} eq 'ics') { @@ -822,7 +822,7 @@ foreach my $row (@$data) { # Record the assignee, product, and status in the big hashes of those things. $bugowners->{$bug->{'assigned_to'}} = 1 if $bug->{'assigned_to'}; $bugproducts->{$bug->{'product'}} = 1 if $bug->{'product'}; - $bugcomponentids->{$bug->{'component_id'}} = 1 if $bug->{'component_id'}; + $bugcomponentids->{$bug->{'bugs.component_id'}} = 1 if $bug->{'bugs.component_id'}; $bugcomponents->{$bug->{'component'}} = 1 if $bug->{'component'}; $bugstatuses->{$bug->{'bug_status'}} = 1 if $bug->{'bug_status'}; |