]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1065444: Several columns are not legal when displaying queries
authorFrédéric Buclin <LpSolit@gmail.com>
Mon, 22 Sep 2014 23:11:51 +0000 (01:11 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Mon, 22 Sep 2014 23:11:51 +0000 (01:11 +0200)
r=dkl a=sgreen

Bugzilla/Search.pm
buglist.cgi

index 2a13969ccb70c27582dbb9c2c03844ddf9588c3d..0395d08eefb8331a8f2e8db582b861c4c45449ce 100644 (file)
@@ -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);
     }
 
index 5106f8dc27bf1fa060ebf133fe67c26409f4fc39..c04c7853feec0821944107196a3d6c862299feb6 100755 (executable)
@@ -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'};