Subscribed unsubscribe Subscribe Subscribe

DBIx::TransactionManager::EndHook

DBIx::TransactionManager 使ってネストしたトランザクションを発行して、全てのトランザクションがうまく行った時だけほげほげしたい。
だけど、それを最後にまとめてやるという方法だと情報を持ち回さないといけなかったりしてめんどくさく、適宜トランザクション単位でやりたい感じだったので

DBIx::TransactionManager::EndHook というのを作りました。

my $txm1 = $tm->txn_scope;
$dbh->do('...');
$tm->add_end_hook(sub {
    # do something
});

my $txm2 = $tm->txn_scope;
$dbh->do('...');
$tm->add_end_hook(sub {
    # do something
});
$txm2->commit;

$txm1->commit;

$txm1 と $txm2 全てが上手くいった時だけ add_end_hook で追加したものが実行されます。$txm2 で失敗すると実行されません。

複数のメソッドの中で $txm を作っては commit としてる時に全てが上手くいった時だけ各箇所からログとか流したい時に使えるのではと思っております。