ぽんぽこ日記

プログラミング、読書、日々の生活

DBIx::Class での引数付きSQL関数の呼び出し


自明といえば自明だが、ドキュメントで使用例が書かれていなかったので記しておく。\\
スキーマからリザルトセットを引っ張ってくるとき,カラムの値そのものではなく、カラムの値にSQL関数を適用したい場合,\\

my $rs = $schema->resultset(’Person’)->search(
{},
{ select => [ ’name’, { LENGTH => ’name’ } ],
as => [qw/ name name_length /],
}
);

とすると、

select name as name , LENGTH(name) as name_lenght from Person;

というSQL文が生成される。

select name as name , date_format(birthday, '%Y/%m/%d') as birthday_string from Person;

のような結果が欲しい場合は、

my $rs = $schema->resultset(’Person’)->search(
{},
{ select => [ ’name’, { date_format => [’birthday’,"'%Y%m/%d'"] } ],
as => [qw/ name birthday_string /],
}
);

のように、引数をリストに並べて書く。
定数文字列の場合、ダブルクォートの内部がそのままSQLとして渡されるので、シングルクォートで括っておく事に気をつける。