DBIx::Simple + SQL::Abstract
を使うと簡単な SQL だと記述が簡潔にすむのだが、副問い合わせや JOIN
を使い出すと途端に複雑になる。こういう場合は素直に素の SQL を書いた方がいいのだが、無理矢理にでも書くときはどうなるかやってみる。
WHERE
句にリテラル SQL を書く
文字列ではなく、文字列リファレンスを使う。例えば誕生日の「日」より「月」の方が数値として大きい(五月四日とか一〇月三日とか)人のリストを得たいとする。
SELECT id, name FROM directory WHERE MONTH(birthday) > DAY(birthday)
これを DBIx::Simple
で表すとこうなる。
my $ds = DBIx::Simple->new($dbh); my $rs = $sa->select('directory', ['id', 'name'], { 'MONTH(birthday)' => { '>' => \'DAY(birthday)' } }, # { 'MONTH(birthday)' => \'> DAY(birthday)' }, );