]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1039940: serialisation of objects for webservice responses is extremely slow
authorByron Jones <glob@mozilla.com>
Tue, 16 Sep 2014 04:43:31 +0000 (12:43 +0800)
committerByron Jones <glob@mozilla.com>
Tue, 16 Sep 2014 04:43:31 +0000 (12:43 +0800)
r=dylan,a=sgreen

Bugzilla/WebService/Bug.pm

index 0062ecc14f69c4fe2284a197c61b68422d77e381..6525b4694af97f47c53f1c98d5f88beef447740c 100644 (file)
@@ -1179,13 +1179,11 @@ sub _bug_to_hash {
     # A bug attribute is "basic" if it doesn't require an additional
     # database call to get the info.
     my %item = %{ filter $params, {
-        creation_time    => $self->type('dateTime', $bug->creation_ts),
         # No need to format $bug->deadline specially, because Bugzilla::Bug
         # already does it for us.
         deadline         => $self->type('string', $bug->deadline),
         id               => $self->type('int', $bug->bug_id),
         is_confirmed     => $self->type('boolean', $bug->everconfirmed),
-        last_change_time => $self->type('dateTime', $bug->delta_ts),
         op_sys           => $self->type('string', $bug->op_sys),
         platform         => $self->type('string', $bug->rep_platform),
         priority         => $self->type('string', $bug->priority),
@@ -1199,9 +1197,8 @@ sub _bug_to_hash {
         whiteboard       => $self->type('string', $bug->status_whiteboard),
     } };
 
-    # First we handle any fields that require extra SQL calls.
-    # We don't do the SQL calls at all if the filter would just
-    # eliminate them anyway.
+    # First we handle any fields that require extra work (such as date parsing
+    # or SQL calls).
     if (filter_wants $params, 'alias') {
         $item{alias} = [ map { $self->type('string', $_) } @{ $bug->alias } ];
     }
@@ -1224,6 +1221,9 @@ sub _bug_to_hash {
         $item{'cc'} = \@cc;
         $item{'cc_detail'} = [ map { $self->_user_to_hash($_, $params, undef, 'cc') } @{ $bug->cc_users } ];
     }
+    if (filter_wants $params, 'creation_time') {
+        $item{'creation_time'} = $self->type('dateTime', $bug->creation_ts);
+    }
     if (filter_wants $params, 'creator') {
         $item{'creator'} = $self->type('email', $bug->reporter->login);
         $item{'creator_detail'} = $self->_user_to_hash($bug->reporter, $params, undef, 'creator');
@@ -1248,6 +1248,9 @@ sub _bug_to_hash {
                        @{ $bug->keyword_objects };
         $item{'keywords'} = \@keywords;
     }
+    if (filter_wants $params, 'last_change_time') {
+        $item{'last_change_time'} = $self->type('dateTime', $bug->delta_ts);
+    }
     if (filter_wants $params, 'product') {
         $item{product} = $self->type('string', $bug->product);
     }