]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 340160: Speed up LogActivityEntry()
authorFrédéric Buclin <LpSolit@gmail.com>
Fri, 27 Sep 2013 22:59:33 +0000 (00:59 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Fri, 27 Sep 2013 22:59:33 +0000 (00:59 +0200)
r=dkl a=justdave

Bugzilla/Bug.pm
Bugzilla/Field.pm

index 4d2421a595dc3502dea2a0ed1f7016a5d5ce98d6..3000bd0aec0b59aa5de4b8fd752067b53d8971e1 100644 (file)
@@ -3953,7 +3953,11 @@ sub get_activity {
 # Update the bugs_activity table to reflect changes made in bugs.
 sub LogActivityEntry {
     my ($i, $col, $removed, $added, $whoid, $timestamp, $comment_id) = @_;
-    my $dbh = Bugzilla->dbh;
+    state $sth =
+      Bugzilla->dbh->prepare('INSERT INTO bugs_activity
+                              (bug_id, who, bug_when, fieldid, removed, added, comment_id)
+                              VALUES (?, ?, ?, ?, ?, ?, ?)');
+
     # in the case of CCs, deps, and keywords, there's a possibility that someone
     # might try to add or remove a lot of them at once, which might take more
     # space than the activity table allows.  We'll solve this by splitting it
@@ -3977,10 +3981,7 @@ sub LogActivityEntry {
         trick_taint($addstr);
         trick_taint($removestr);
         my $fieldid = get_field_id($col);
-        $dbh->do("INSERT INTO bugs_activity
-                  (bug_id, who, bug_when, fieldid, removed, added, comment_id)
-                  VALUES (?, ?, ?, ?, ?, ?, ?)",
-                  undef, ($i, $whoid, $timestamp, $fieldid, $removestr, $addstr, $comment_id));
+        $sth->execute($i, $whoid, $timestamp, $fieldid, $removestr, $addstr, $comment_id);
     }
 }
 
index c4ee774987e3ee1382e1a9ec6878c246482f8926..ebc043ab77e031665d1056dc97a6425fa594cc43 100644 (file)
@@ -1324,7 +1324,7 @@ sub check_field {
 Description: Returns the ID of the specified field name and throws
              an error if this field does not exist.
 
-Params:      $name - a field name
+Params:      $fieldname - a field name
 
 Returns:     the corresponding field ID or an error if the field name
              does not exist.
@@ -1334,15 +1334,10 @@ Returns:     the corresponding field ID or an error if the field name
 =cut
 
 sub get_field_id {
-    my ($name) = @_;
-    my $dbh = Bugzilla->dbh;
-
-    trick_taint($name);
-    my $id = $dbh->selectrow_array('SELECT id FROM fielddefs
-                                    WHERE name = ?', undef, $name);
+    my $field = Bugzilla->fields({ by_name => 1 })->{$_[0]}
+      or ThrowCodeError('invalid_field_name', {field => $_[0]});
 
-    ThrowCodeError('invalid_field_name', {field => $name}) unless $id;
-    return $id
+    return $field->id;
 }
 
 1;