From: mozilla%colinogilvie.co.uk <> Date: Wed, 20 Jul 2005 05:39:57 +0000 (+0000) Subject: Bug 282737: Software Error from time-tracking fields during Change Columns X-Git-Tag: bugzilla-2.20rc2~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5426ffc12f1e49f701aac25d191373b85a462167;p=thirdparty%2Fbugzilla.git Bug 282737: Software Error from time-tracking fields during Change Columns Patch by Joel, Me, r=wurblzap, a=myk --- diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index ec93e96a80..ba06e475b7 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -147,6 +147,11 @@ sub init { push @supptables, "INNER JOIN components AS map_components " . "ON bugs.component_id = map_components.id"; } + + if (grep($_ =~/AS (actual_time|percentage_complete)$/, @$fieldsref)) { + push(@supptables, "INNER JOIN longdescs AS ldtime " . + "ON ldtime.bug_id = bugs.bug_id"); + } my $minvotes; if (defined $params->param('votes')) { @@ -217,11 +222,6 @@ sub init { push(@specialchart, ["keywords", $t, $params->param('keywords')]); } - if (lsearch($fieldsref, "(SUM(ldtime.work_time)*COUNT(DISTINCT ldtime.bug_when)/COUNT(bugs.bug_id)) AS actual_time") != -1) { - push(@supptables, "INNER JOIN longdescs AS ldtime " . - "ON ldtime.bug_id = bugs.bug_id"); - } - foreach my $id ("1", "2") { if (!defined ($params->param("email$id"))) { next; diff --git a/buglist.cgi b/buglist.cgi index 4768843de3..45c0db5524 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -733,7 +733,15 @@ foreach my $fragment (split(/,/, $order)) { # Add order columns to selectnames # The fragment has already been validated $fragment =~ s/\s+(asc|desc)$//; - $fragment =~ tr/a-zA-Z\.0-9\-_//cd; + # This fixes an issue where columns being used in the ORDER BY statement + # can have the SQL that generates the value changed to become invalid - + # mainly affects time tracking. + if ($fragment =~ / AS (\w+)/) { + $fragment = $columns->{$1}->{'name'}; + } + else { + $fragment =~ tr/a-zA-Z\.0-9\-_//cd; + } push @selectnames, $fragment; } } @@ -881,7 +889,7 @@ while (my @row = $buglist_sth->fetchrow_array()) { # or because of human choice my %min_membercontrol; if (@bugidlist) { - my $sth = $dbh->prepare( + my $sth = $dbh->prepare( "SELECT DISTINCT bugs.bug_id, MIN(group_control_map.membercontrol) " . "FROM bugs " . "INNER JOIN bug_group_map " .