]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 374016: Use transactions to create bugs
authormkanat%bugzilla.org <>
Sat, 24 Mar 2007 05:11:38 +0000 (05:11 +0000)
committermkanat%bugzilla.org <>
Sat, 24 Mar 2007 05:11:38 +0000 (05:11 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=LpSolit

Bugzilla/Bug.pm

index 78c939b987d0a1fe642086d49c4669663900df6c..daebaf70187a9f3628996fe06e0cc288dc03a0b1 100755 (executable)
@@ -264,6 +264,8 @@ sub create {
     my $class  = shift;
     my $dbh = Bugzilla->dbh;
 
+    $dbh->bz_start_transaction();
+
     $class->check_required_create_fields(@_);
     my $params = $class->run_create_validators(@_);
 
@@ -291,10 +293,6 @@ sub create {
     my $timestamp = $params->{creation_ts}; 
     delete $params->{creation_ts};
 
-    $dbh->bz_lock_tables('bugs WRITE', 'bug_group_map WRITE', 
-        'longdescs WRITE', 'cc WRITE', 'keywords WRITE', 'dependencies WRITE',
-        'bugs_activity WRITE', 'fielddefs READ');
-
     my $bug = $class->insert_create_data($params);
 
     # Add the group restrictions
@@ -342,6 +340,12 @@ sub create {
         $sth_bug_time->execute($timestamp, $blocked_id);
     }
 
+    $dbh->bz_commit_transaction();
+
+    # Because MySQL doesn't support transactions on the longdescs table,
+    # we do this after we've committed the transaction. That way we're
+    # fairly sure we're inserting a good Bug ID.
+
     # And insert the comment. We always insert a comment on bug creation,
     # but sometimes it's blank.
     my @columns = qw(bug_id who bug_when thetext);
@@ -357,7 +361,6 @@ sub create {
     $dbh->do('INSERT INTO longdescs (' . join(',', @columns)  . ")
                    VALUES ($qmarks)", undef, @values);
 
-    $dbh->bz_unlock_tables();
 
     return $bug;
 }