tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

SQL::Executor を cpan にアップしました

前にだいたい書きましたが、SQL::Executor というモジュールを書いてます。

簡単な SQLSQL::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 でも何でもよいので連絡いただければ、と思います。

*1:僕個人的には select_by_sql とか、execute_query とかの名前付きなしのやつをたまに使うかも、くらいです

*2:連休中に書き始めたので、2ヶ月弱くらい