diff options
author | Frédéric Buclin <LpSolit@gmail.com> | 2012-08-03 12:20:19 +0200 |
---|---|---|
committer | Frédéric Buclin <LpSolit@gmail.com> | 2012-08-03 12:20:19 +0200 |
commit | 7c098954938807062a27d72f52d3f2a8dbd06bfd (patch) | |
tree | 675dc927d1a818b6d7a44a3d22ec0106b46e01c1 | |
parent | 2cab4974d0ee9c1958769c76f7437b848fef332a (diff) | |
download | bugzilla-7c098954938807062a27d72f52d3f2a8dbd06bfd.tar.gz bugzilla-7c098954938807062a27d72f52d3f2a8dbd06bfd.tar.xz |
Bug 780028: Oracle crashes if a column listed in ORDER BY appears twice in SELECT
r=glob a=LpSolit
-rw-r--r-- | Bugzilla/Search.pm | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index da37a9638..9cab49ab8 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -824,10 +824,19 @@ sub _add_extra_column { # These are the columns that we're going to be actually SELECTing. sub _display_columns { my ($self) = @_; - # Do not alter the list specified here at all, even if they are duplicated. - # Those are passed by the caller, and the caller expects to get them back - # in the exact same order. - $self->{display_columns} ||= [$self->_input_columns, $self->_extra_columns]; + return @{ $self->{display_columns} } if $self->{display_columns}; + + # Do not alter the list from _input_columns at all, even if there are + # duplicated columns. Those are passed by the caller, and the caller + # expects to get them back in the exact same order. + my @columns = $self->_input_columns; + + # Only add columns which are not already listed. + my %list = map { $_ => 1 } @columns; + foreach my $column ($self->_extra_columns) { + push(@columns, $column) unless $list{$column}++; + } + $self->{display_columns} = \@columns; return @{ $self->{display_columns} }; } |