2008-08-06
Data::ObjectDriverでトランザクション
CPANに上がってるのだとどーやったらいいのかさっぱりわかんなかったけど、code.sixapart.comに上がってるやつだとこんな感じでやるみたい。
Data::ObjectDriver::BaseObject->begin_work; eval { my $album = Album->new; $album->title('Album'); $album->artist('Artist'); $album->save; for ( 1 .. 5 ) { my $track = Track->new; $track->title("Track $_"); $track->artist("Artist $_"); $track->album_id($album->id); $track->save; } }; if ($@) { Data::ObjectDriver::BaseObject->rollback; die $@; } else { Data::ObjectDriver::BaseObject->commit; }
innodbなmysqlはこれで確認したけどSQLiteだともう一工夫が必要みたい。
Data::ObjectDriver::Driver::DBI->new( dsn => 'dbi:SQLite:db.db', reuse_dbh => 1, );
reuse_dbhを立てて置かないとセグメンテーションフォルトで落ちちゃう。
トラックバック - http://d.hatena.ne.jp/hide-K/20080806/1217996952
リンク元
- 27 http://reader.livedoor.com/reader/
- 6 http://b.hatena.ne.jp/
- 6 http://b.hatena.ne.jp/entrylist?sort=hot
- 5 http://b.hatena.ne.jp/t/perl
- 5 http://fastladder.com/reader/
- 4 http://d.hatena.ne.jp/
- 3 http://b.hatena.ne.jp/entrylist?sort=hot&of=0&threshold=3
- 3 http://perl-mongers.org/2008/05/moose.html
- 2 http://b.hatena.ne.jp/entrylist?url=http://d.hatena.ne.jp/&sort=hot&of=50&threshold=5
- 2 http://codezine.jp/bookmark/hatena.aspx


