]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 600496: Make searching on [Bug creation] work again, by implementing
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Sat, 2 Oct 2010 18:42:34 +0000 (11:42 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Sat, 2 Oct 2010 18:42:34 +0000 (11:42 -0700)
creation_ts for the changedafter and changedbefore operators in Search.pm.
r=mkanat, a=mkanat (module owner)

Bugzilla/Search.pm
xt/lib/Bugzilla/Test/Search/Constants.pm

index 952fc085412b52c1282963fce34430f2cb6d2e3a..fa162ed1df08da68d6fe43307b7e1e44ab252f41 100644 (file)
@@ -1264,7 +1264,7 @@ sub _special_parse_bug_status {
     @bug_status = _valid_values(\@bug_status, $legal_statuses);
 
     # If the user has selected every status, change to selecting none.
-    # This is functionally equivalent, but quite a lot faster.    
+    # This is functionally equivalent, but quite a lot faster.
     if ($all or scalar(@bug_status) == scalar(@$legal_statuses)) {
         delete $params->{'bug_status'};
     }
@@ -1285,6 +1285,8 @@ sub _special_parse_chfield {
     my $value_to = $params->{'chfieldvalue'};
     $value_to = '' if !defined $value_to;
 
+    @fields = map { $_ eq '[Bug creation]' ? 'creation_ts' : $_ } @fields;
+
     my @charts;
     # It is always safe and useful to push delta_ts into the charts
     # if there are any dates specified. It doesn't conflict with
@@ -1297,15 +1299,6 @@ sub _special_parse_chfield {
     if ($date_to ne '') {
         push(@charts, ['delta_ts', 'lessthaneq', $date_to]);
     }
-    
-    if (grep { $_ eq '[Bug creation]' } @fields) {
-        if ($date_from ne '') {
-            push(@charts, ['creation_ts', 'greaterthaneq', $date_from]);
-        }
-        if ($date_to ne '') {
-            push(@charts, ['creation_ts', 'lessthaneq', $date_to]);
-        }
-    }
 
     # Basically, we construct the chart like:
     #
@@ -1321,7 +1314,6 @@ sub _special_parse_chfield {
     if ($value_to ne '') {
         my @value_chart;
         foreach my $field (@fields) {
-            next if $field eq '[Bug creation]';
             push(@value_chart, $field, 'changedto', $value_to);
         }
         push(@charts, \@value_chart) if @value_chart;
@@ -1330,7 +1322,6 @@ sub _special_parse_chfield {
     if ($date_from ne '') {
         my @date_from_chart;
         foreach my $field (@fields) {
-            next if $field eq '[Bug creation]';
             push(@date_from_chart, $field, 'changedafter', $date_from);
         }
         push(@charts, \@date_from_chart) if @date_from_chart;
@@ -2775,10 +2766,18 @@ sub _changedbefore_changedafter {
     my ($chart_id, $joins, $field, $operator, $value) =
         @$args{qw(chart_id joins field operator value)};
     my $dbh = Bugzilla->dbh;
-    
-    my $sql_operator = ($operator =~ /before/) ? '<=' : '>=';
+
     my $field_object = $self->_chart_fields->{$field}
         || ThrowCodeError("invalid_field_name", { field => $field });
+    
+    # Asking when creation_ts changed is just asking when the bug was created.
+    if ($field_object->name eq 'creation_ts') {
+        $args->{operator} =
+            $operator eq 'changedbefore' ? 'lessthaneq' : 'greaterthaneq';
+        return $self->_do_operator_function($args);
+    }
+    
+    my $sql_operator = ($operator =~ /before/) ? '<=' : '>=';
     my $field_id = $field_object->id;
     # Charts on changed* fields need to be field-specific. Otherwise,
     # OR chart rows make no sense if they contain multiple fields.
index abe01bbd1f13c8200a815946a95ba6b1bb075fee..7b06a0c952efbbb0d6f09735cd09f14bc769138e 100644 (file)
@@ -420,13 +420,11 @@ use constant KNOWN_BROKEN => {
     'changedbefore' => {
         CHANGED_BROKEN,
         'attach_data.thedata' => { contains => [1] },
-        creation_ts => { contains => [1,2,5] },
     },
     'changedafter' => {
         'attach_data.thedata' => { contains => [2,3,4] },
         classification => { contains => [2,3,4] },
         commenter   => { contains => [2,3,4] },
-        creation_ts => { contains => [2,3,4] },
         delta_ts    => { contains => [2,3,4] },
         percentage_complete => { contains => [2,3,4] },
         'requestees.login_name' => { contains => [2,3,4] },
@@ -642,7 +640,6 @@ use constant BROKEN_NOT => {
         "attach_data.thedata"   => { contains => [2, 3, 4] },
         "classification"        => { contains => [2, 3, 4] },
         "commenter"             => { contains => [2, 3, 4] },
-        "creation_ts"           => { contains => [2, 3, 4] },
         "delta_ts"              => { contains => [2, 3, 4] },
         "percentage_complete"   => { contains => [2, 3, 4] },
         "requestees.login_name" => { contains => [2, 3, 4] },
@@ -650,7 +647,6 @@ use constant BROKEN_NOT => {
     },
     changedbefore=> {
         CHANGED_BROKEN_NOT,
-        creation_ts => { contains => [1, 2, 5] },
         work_time   => { }
     },
     changedby => {
@@ -1096,7 +1092,7 @@ use constant TESTS => {
         { contains => [1], value => '<1-delta>',
           override => {
               CHANGED_OVERRIDE,
-              creation_ts => { contains => [1,2,5] },
+              creation_ts => { contains => [1,5] },
               blocked   => { contains => [1,2] },
               dependson => { contains => [1,3] },
               longdesc => { contains => [1,5] },
@@ -1107,7 +1103,7 @@ use constant TESTS => {
         { contains => [2,3,4], value => '<2-delta>',
           override => { 
               CHANGED_OVERRIDE,
-              creation_ts => { contains => [2,3,4] },
+              creation_ts => { contains => [3,4] },
               # We only change this for one bug, and it doesn't match.
               'longdescs.isprivate' => { contains => [] },
               # Same for everconfirmed.
@@ -1200,8 +1196,8 @@ use constant INJECTION_BROKEN_FIELD => {
 # search => 1 means the Bugzilla::Search creation fails, but
 # field_ok contains fields that it does actually succeed for.
 use constant INJECTION_BROKEN_OPERATOR => {
-    changedafter  => { search => 1 },
-    changedbefore => { search => 1 },
+    changedafter  => { search => 1, field_ok => ['creation_ts'] },
+    changedbefore => { search => 1, field_ok => ['creation_ts'] },
     changedby     => { search => 1 },
 };