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

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

SQL::Executor 0.11 をリリースしました

昨日放流したので、もうCPAN の各ミラーにアップされているでしょう。

たいした変更はしてないのですが、(2つの変更のうちの1つは)互換性の無い変更なので書いときます。

1. 名前付きプレースホルダで、プログラム側が渡してなくて、SQL 側がパラメータ定義してる場合、エラーになっていたのを、デフォルトではエラーではなくしました

ちょっと分かりにくいので、コードで説明すると、たとえば

my $ex = SQL::Executor->new($dbh);
$ex->select_named('SELECT * FROM SOME_TABLE WHERE value = :value', {});

みたいな呼び方は従来はエラーとしていましたが、これは正当なものとしました。従来どおりエラーとしたい場合は、

my $ex = SQL::Executor->new($dbh, { check_empty_bind => 1 });

とコンストラクタで check_empty_bind に 1(TRUE) を設定してください。(デフォルト 0(FALSE)です)

何がしたいかというと、

$ex->select_named('SELECT * FROM SOME_TABLE WHERE IF( :value IS NULL, 1, value = :value )', $params_href);

みたいな感じで、「パラメータを省略したら検索条件から外す」みたいな処理が結構あるので、そういうときに便利かなー、と思ってのことです。*1

2. select_id はデフォルトでは発行しないようにしました

今まで、select 文でコールバックを指定していた場合、当該 select 文毎に一意となる id(select_id)を発行していたのですが、これを止めました。必要な場合、SQL::Executor を継承して、select_id メソッドをオーバーライドしてください。これにより互換性がなくなったのですが、多分僕以外使ってないと思うので、問題無いんじゃないかなー、と思っています*2

もし欲しい人がいれば、コンストラクタで select_id メソッドを置き換えるコールバックを受けるとか、そんな感じのことを考えてるので、@tsucchi OR CPAN RT OR github issue プリーズ。

何がしたかったというと、Data::UUID への依存を切りたかっただけです。おかげでインストールしやすくなったのではないかなー、と思います。

ってか、ここまでやってから CPAN に上げればよかったわー、と思えるバージョンです。多分もう大きな変更はしないので、安心して使ってもらえばよいのではないかなー、と思います。

*1:ちなみに、デフォルトの挙動をかえず、デフォルトはエラーにする選択肢も考えたのですが、最初に書いた記事ふくめ、本モジュールに対する反響は僕の知るかぎりなかったので、今回は「こっちのほうが便利だよねー」と思える方にデフォルトを振りました。なので紹介記事に対する反響ってのは重要なんです。これは自戒も込めてだけど。

*2:そもそもこのモジュール使ってる人がいるかどうかも怪しいけど。。。