DBICでAtomicに値をupdateする術

トランザクション使ってください。
以上!!

とかが当然一番な感じだったりするのですが、
MySQLMyISAMを使ってたりしてトランザクションなんですかそれ状態の場合
まあ困るわけです。

my $user = $self->model('User')->search()->first;
my $login_count = $user->login_count;
$user->update({ login_count => $login_count+1});

とか書くとそりゃあんたずれるずれる。
ユーザ毎のLoginの回数を数えるだけならそんなにずれないでしょうけど、
がりがりUpdateされるテーブルの場合、ずれるずれる。
ずれまくります。

トランザクションが使えずになんとかアトミックに値を更新したい場合
こういうSQLが思い浮かぶわけですが。

UPDATE user SET login_count = login_count + 1 WHERE id = 1;

こんなの。
これをDBICで実現するのですよ。
そこのあなた!

my $user = $self->model('User')->search()->first;
$user->update({ login_count => \'login_count + 1'});

やっぱりこんなときはスカラーリファレンスの術でした。

しかしWassr楽しいわぁ。