2006-03-08
Class::DBIのsearchなどで発行されるSQLを確認するTips
Class::DBIを使ってるときに「どんなSQLを発行してるんじゃろ?」と思うことはありませんか? 僕はあります*1。
なんかいい方法がないかなー、と思ってたんですが、Class::DBI::Plugin::Iteratorを使っていれば
my $itr = CD->search( .... ); print $itr->sql, "\n"; print join ',', @{$itr->args}, "\n";
でSQLの中身が確認できることを発見*2。プレースホルダの部分は?になってるけど、その引数も確認できる*3。
どーせならEXPLAINの結果が確認できるとより便利な気もしますな。
Class::DBI::Sweetで集約関数が扱えるようになってた(←わけじゃなかった)
普段はClass::DBIを使ってるわけですが、集約関数は扱えないんですね。
直接SQLを書けばいいんですけど。なんとなくダサくてやだなーと思ってたら、Class::DBI::Sweetで扱えるようになってるじゃないですか。前にドキュメントを読んだ時はそんな記述はなかったのに~。
というわけでやりたいことができるのか調査中なのですが、ハマった部分があったのでメモ。
Class::DBI::Sweetのバージョン0.08だけの問題かもしれないけれど、SQL::Abstractのバージョンが1.20じゃないとテストが通りません*4。
あと0.07からClass::DBIのバージョンが3.0.12以降必須になってるっぽいですが*5、集約関数の対応は0.06からなので、そっちを使ったほうがいいかもと思いつつ(古いバージョンのClass::DBIが入っているサーバがいくつかあるから)テストしてません。
追記
別に集約関数のための機能が増えてるわけじゃなかった。。。。
やっぱ地道にSQL書いていくしかないのね。
さらに追記
んでも、Class::DBI::Sweetを使えば割とよさげに処理できるのは間違いないっぽい。
JOINの処理とかはかなりいい感じになるのですね。