diff options
Diffstat (limited to 'Bugzilla/DB/Mysql.pm')
-rw-r--r-- | Bugzilla/DB/Mysql.pm | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/Bugzilla/DB/Mysql.pm b/Bugzilla/DB/Mysql.pm index 582a2a7b8..582df3d54 100644 --- a/Bugzilla/DB/Mysql.pm +++ b/Bugzilla/DB/Mysql.pm @@ -207,14 +207,23 @@ sub bz_lock_tables { ThrowCodeError("already_locked", { current => $self->{private_bz_tables_locked}, new => $list }); } else { + $self->bz_start_transaction(); $self->do('LOCK TABLE ' . $list); - $self->{private_bz_tables_locked} = $list; } } sub bz_unlock_tables { my ($self, $abort) = @_; + + if ($self->bz_in_transaction) { + if ($abort) { + $self->bz_rollback_transaction(); + } + else { + $self->bz_commit_transaction(); + } + } # Check first if there was previous matching lock if (!$self->{private_bz_tables_locked}) { @@ -223,28 +232,10 @@ sub bz_unlock_tables { ThrowCodeError("no_matching_lock"); } else { $self->do("UNLOCK TABLES"); - $self->{private_bz_tables_locked} = ""; } } -# As Bugzilla currently runs on MyISAM storage, which does not support -# transactions, these functions die when called. -# Maybe we should just ignore these calls for now, but as we are not -# using transactions in MySQL yet, this just hints the developers. -sub bz_start_transaction { - die("Attempt to start transaction on DB without transaction support"); -} - -sub bz_commit_transaction { - die("Attempt to commit transaction on DB without transaction support"); -} - -sub bz_rollback_transaction { - die("Attempt to rollback transaction on DB without transaction support"); -} - - sub _bz_get_initial_schema { my ($self) = @_; return $self->_bz_build_schema_from_disk(); |