DBICでMySQLのロック
http://d.hatena.ne.jp/tokuhirom/20070126/1169812586
なんとなくDBICのにしてみた。
package DBIx::Class::Lock::MySQL; use strict; use warnings; use base 'DBIx::Class'; use Carp::Clan qw/^DBIx::Class/; sub get_lock { my ($self, $lock_id, $timeout) = @_; $self->{__MYSQL__LOCK__ID} = $lock_id; my $dbh = $self->storage->dbh; my $sth = $dbh->prepare('SELECT GET_LOCK(?,?)'); $sth->execute($self->{__MYSQL__LOCK__ID}, $timeout); my ($result) = $sth->fetchrow_array(); $sth->finish; unless(defined($result)) { croak("Error trying to acquire named lock.\n"); } unless($result) { return undef; } return $self; } sub DESTROY { my $self = shift; my $dbh = $self->storage->dbh; if ($dbh->ping) { my $sth = $dbh->prepare('SELECT RELEASE_LOCK(?)'); $sth->execute($self->{__MYSQL__LOCK__ID}); $sth->finish(); } } 1;
ってか時間がなかったので適当。
久々にコード書いた。
もっとまともなの書かないとなぁ。
(追記)
これ、もっと透過的に使えるようにしたらおもろいかも。