]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 282737: Software Error from time-tracking fields during Change Columns
authormozilla%colinogilvie.co.uk <>
Wed, 20 Jul 2005 05:39:57 +0000 (05:39 +0000)
committermozilla%colinogilvie.co.uk <>
Wed, 20 Jul 2005 05:39:57 +0000 (05:39 +0000)
Patch by Joel, Me, r=wurblzap, a=myk

Bugzilla/Search.pm
buglist.cgi

index ec93e96a80b589768efe16d5b1b8a9fabd59be19..ba06e475b79180aed152e6b0d2e83dd429145dd8 100644 (file)
@@ -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;
index 4768843de3ae33f5ee5bc15597963768df0b3f08..45c0db5524a4f5e4261b652abb76d758ffb48585 100755 (executable)
@@ -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(\r
+    my $sth = $dbh->prepare(
         "SELECT DISTINCT bugs.bug_id, MIN(group_control_map.membercontrol) " .
           "FROM bugs " .
     "INNER JOIN bug_group_map " .