SQL::Abstract かしこす

以前「DBICで本当に困ったら SCALAR REFERNCE を使え - daily dayflower」にて,

DBIC で WHERE field1 IS NOT NULL な検索をしようと思って,

……

$resultset->search({ field1 => \'IS NOT NULL' });

とか書いていたんですが,

$resultset->search({ field1 => { '!=', undef } });

でよかったのでした。

$resultset->search({ field1 => undef });

WHERE field1 IS NULL

というのは知っていたんですが,'!=' をつけるときちんと「IS NOT NULL」に変換してくれるとは(SQL::Abstract の 714 行目あたりのロジックとしてちゃんとありました)。これでスカラーリファレンスを減らせる…

ちなみに DB に用意されてる関数を使うときはやはりスカラーリファレンスを使うといいのは DBIC の FAQ にも書かれているとおりです。


DBICSQL 文を組み立てるためにバックエンドで SQL::Abstract を利用しているんで,DBIC 使いの人は SQL::Abstract の WHERE 節の話を読んだほうがいいと思いました。

ほか,DBIC の拡張による超絶技巧としてtomi さんの記事を読むと驚愕することうけあい。