package Bugzilla::Search;
use base qw(Exporter);
@Bugzilla::Search::EXPORT = qw(
- EMPTY_COLUMN
-
IsValidQueryType
split_order_term
translate_old_column
long_desc => 'longdesc',
};
-# A SELECTed expression that we use as a placeholder if somebody selects
-# <none> for the X, Y, or Z axis in report.cgi.
-use constant EMPTY_COLUMN => '-1';
-
-# Some fields are not sorted on themselves, but on other fields.
+# Some fields are not sorted on themselves, but on other fields.
# We need to have a list of these fields and what they map to.
use constant SPECIAL_ORDER => {
'target_milestone' => {
# These are fields that never go into the GROUP BY on any DB. bug_id
# is here because it *always* goes into the GROUP BY as the first item,
# so it should be skipped when determining extra GROUP BY columns.
-use constant GROUP_BY_SKIP => EMPTY_COLUMN, qw(
+use constant GROUP_BY_SKIP => qw(
bug_id
flagtypes.name
keywords
my $alias = $column;
# Aliases cannot contain dots in them. We convert them to underscores.
$alias =~ s/\./_/g;
- my $sql = ($column eq EMPTY_COLUMN)
- ? EMPTY_COLUMN : COLUMNS->{$column}->{name} . " AS $alias";
+ my $sql = COLUMNS->{$column}->{name} . " AS $alias";
push(@sql_fields, $sql);
}
return @sql_fields;
|| ($valid_columns->{$tbl_field} && trick_taint($tbl_field))
|| ThrowCodeError("report_axis_invalid", {fld => "z", val => $tbl_field});
-my @axis_fields = ($row_field || EMPTY_COLUMN,
- $col_field || EMPTY_COLUMN,
- $tbl_field || EMPTY_COLUMN);
+my @axis_fields = grep { $_ } ($row_field, $col_field, $tbl_field);
# Clone the params, so that Bugzilla::Search can modify them
my $params = new Bugzilla::CGI($cgi);
my $tbl_isnumeric = 1;
foreach my $result (@$results) {
- my ($row, $col, $tbl) = @$result;
-
# handle empty dimension member names
- $row = ' ' if ($row eq '');
- $col = ' ' if ($col eq '');
- $tbl = ' ' if ($tbl eq '');
-
- $row = "" if ($row eq EMPTY_COLUMN);
- $col = "" if ($col eq EMPTY_COLUMN);
- $tbl = "" if ($tbl eq EMPTY_COLUMN);
+ my $row = check_value($row_field, $result);
+ my $col = check_value($col_field, $result);
+ my $tbl = check_value($tbl_field, $result);
$data{$tbl}{$col}{$row}++;
$names{"col"}{$col}++;
return @sorted;
}
+
+sub check_value {
+ my ($field, $result) = @_;
+
+ my $value;
+ if (!defined $field) {
+ $value = '';
+ }
+ elsif ($field eq '') {
+ $value = ' ';
+ }
+ else {
+ $value = shift @$result;
+ $value = ' ' if (!defined $value || $value eq '');
+ }
+ return $value;
+}
[% FOREACH col = col_names %]
[% row_total = row_total + data.$tbl.$col.$row %]
[% NEXT IF col == "" %]
- [% col_totals.$col = col_totals.$col + data.$tbl.$col.$row %]
+ [% col_totals.$col = (col_totals.$col || 0) + data.$tbl.$col.$row %]
[% col_idx = 1 - col_idx %]
<td class="[% classes.$row_idx.$col_idx %]" align="center">