Bug 1065444: Several columns are not legal when displaying queries
r=dkl a=sgreen git-svn-id: svn://10.0.0.236/trunk@265583 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
9618fd7967
commit
ac150fb997
@ -1 +1 @@
|
|||||||
9144
|
9145
|
||||||
@ -1 +1 @@
|
|||||||
6b518aa3fe597f9a6d434d18520ed268b91ab220
|
1488a5896c2aff13218d9f92e26ea498d7cbb847
|
||||||
@ -647,7 +647,6 @@ sub COLUMNS {
|
|||||||
|
|
||||||
foreach my $col (@id_fields) {
|
foreach my $col (@id_fields) {
|
||||||
$special_sql{$col} = "map_${col}.name";
|
$special_sql{$col} = "map_${col}.name";
|
||||||
$columns{"${col}_id"}{name} = "bugs.${col}_id";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Do the actual column-getting from fielddefs, now.
|
# Do the actual column-getting from fielddefs, now.
|
||||||
@ -762,7 +761,7 @@ sub data {
|
|||||||
my @orig_fields = $self->_input_columns;
|
my @orig_fields = $self->_input_columns;
|
||||||
my $all_in_bugs_table = 1;
|
my $all_in_bugs_table = 1;
|
||||||
foreach my $field (@orig_fields) {
|
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'];
|
$self->{fields} = ['bug_id'];
|
||||||
$all_in_bugs_table = 0;
|
$all_in_bugs_table = 0;
|
||||||
last;
|
last;
|
||||||
@ -1014,10 +1013,16 @@ sub _sql_select {
|
|||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
my @sql_fields;
|
my @sql_fields;
|
||||||
foreach my $column ($self->_display_columns) {
|
foreach my $column ($self->_display_columns) {
|
||||||
|
my $sql = $self->COLUMNS->{$column}->{name} // '';
|
||||||
|
if ($sql) {
|
||||||
my $alias = $column;
|
my $alias = $column;
|
||||||
# Aliases cannot contain dots in them. We convert them to underscores.
|
# Aliases cannot contain dots in them. We convert them to underscores.
|
||||||
$alias =~ s/\./_/g;
|
$alias =~ tr/./_/;
|
||||||
my $sql = $self->COLUMNS->{$column}->{name} . " AS $alias";
|
$sql .= " AS $alias";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$sql = $column;
|
||||||
|
}
|
||||||
push(@sql_fields, $sql);
|
push(@sql_fields, $sql);
|
||||||
}
|
}
|
||||||
return @sql_fields;
|
return @sql_fields;
|
||||||
@ -1394,7 +1399,7 @@ sub _sql_group_by {
|
|||||||
my @extra_group_by;
|
my @extra_group_by;
|
||||||
foreach my $column ($self->_select_columns) {
|
foreach my $column ($self->_select_columns) {
|
||||||
next if $self->_skip_group_by->{$column};
|
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);
|
push(@extra_group_by, $sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -281,6 +281,38 @@ sub GetGroups {
|
|||||||
return [values %legal_groups];
|
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
|
# Command Execution
|
||||||
################################################################################
|
################################################################################
|
||||||
@ -510,38 +542,6 @@ if (grep('relevance', @displaycolumns) && !$fulltext) {
|
|||||||
@displaycolumns = grep($_ ne 'relevance', @displaycolumns);
|
@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
|
# Select Column Determination
|
||||||
################################################################################
|
################################################################################
|
||||||
@ -582,7 +582,7 @@ foreach my $col (@displaycolumns) {
|
|||||||
# has for modifying the bugs.
|
# has for modifying the bugs.
|
||||||
if ($dotweak) {
|
if ($dotweak) {
|
||||||
push(@selectcolumns, "bug_status") if !grep($_ eq 'bug_status', @selectcolumns);
|
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') {
|
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.
|
# Record the assignee, product, and status in the big hashes of those things.
|
||||||
$bugowners->{$bug->{'assigned_to'}} = 1 if $bug->{'assigned_to'};
|
$bugowners->{$bug->{'assigned_to'}} = 1 if $bug->{'assigned_to'};
|
||||||
$bugproducts->{$bug->{'product'}} = 1 if $bug->{'product'};
|
$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'};
|
$bugcomponents->{$bug->{'component'}} = 1 if $bug->{'component'};
|
||||||
$bugstatuses->{$bug->{'bug_status'}} = 1 if $bug->{'bug_status'};
|
$bugstatuses->{$bug->{'bug_status'}} = 1 if $bug->{'bug_status'};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user