SQL::Executor を cpan にアップしました
前にだいたい書きましたが、SQL::Executor というモジュールを書いてます。
簡単な SQL は SQL::Maker を使って SQL を生成して投げて、面倒くさいやつは生のSQLと名前付きプレースホルダを使って SQL を投げれる物体です。
use DBI; use SQL::Executor; my $dbh = DBI->connect($dsn, $id, $pass); my $ex = SQL::Executor->new($dbh); my @rows = $ex->select('SOME_TABLE', { id => 123 }); $ex->insert('SOME_TABLE', { id => 124, value => 'xxxx'} ); $ex->update('SOME_TABLE', { value => 'yyyy'}, { id => 124 } ); $ex->delete('SOME_TABLE', { id => 124 } ); # 名前付きプレースホルダ(select) my @rows = $ex->select_named('SELECT id, value FROM SOME_TABLE WHERE id = :id', { id => 123 }); # 名前付きプレースホルダ(更新系) $ex->execute_query_named('INSERT INTO SOME_TABLE SET id = :id, value = :value ON DUPLICATE KEY UPDATE value = :value', { id => 123, value => 'value dayo' }); # iterator my $itr = $select_itr('SOME_TABLE', { value => 'aaa' }); while ( my $row = $itr->next() ) { ... #do something with row }
ほかにもいっぱいメソッドあるのですが、あとのメソッドは使わなくても多分大丈夫じゃないかなー、と思います。*1
あと、select 時にコールバックを指定できるのですが、これは自作の ORM のエンジンとして使うためなのですが、CSV 出力とかしたい場合なんかも便利かもしれません。(やったこと無いので、やってみたらエントリ書くかも)
個人的には結構長く*2使っているので、まあまあ安定してるんじゃないかなー、と思ってます。よろしければ使って見てください。変なところとかあれば、CPAN の RT でも github の issue でも、twitter の @tsucchi でも何でもよいので連絡いただければ、と思います。