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 にも書かれているとおりです。
DBIC で SQL 文を組み立てるためにバックエンドで SQL::Abstract を利用しているんで,DBIC 使いの人は SQL::Abstract の WHERE 節の話を読んだほうがいいと思いました。
ほか,DBIC の拡張による超絶技巧としてtomi さんの記事を読むと驚愕することうけあい。