Hatena::Groupasakura

浅倉卓司@blog風味? このページをアンテナに追加 RSSフィード

Error : RSSが取得できませんでした。

2006-03-08(Wed)

Class::DBIのsearchなどで発行されるSQLを確認するTips

| 18:18 |  Class::DBIのsearchなどで発行されるSQLを確認するTips - 浅倉卓司@blog風味? を含むブックマーク  Class::DBIのsearchなどで発行されるSQLを確認するTips - 浅倉卓司@blog風味? のブックマークコメント

 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で集約関数が扱えるようになってた(←わけじゃなかった)

| 14:08 |  Class::DBI::Sweetで集約関数が扱えるようになってた(←わけじゃなかった) - 浅倉卓司@blog風味? を含むブックマーク  Class::DBI::Sweetで集約関数が扱えるようになってた(←わけじゃなかった) - 浅倉卓司@blog風味? のブックマークコメント

 普段は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の処理とかはかなりいい感じになるのですね。

 set_sqlにうまくSQLを書けばいいのかもしれない(駄目かもしれないけど)。

*1:より積極的にはEXPLAINの結果が見たいわけですが。

*2:素で忘れてた。

*3:$itr->argsの戻り値が常にARRAY_REFなのはださい気もするけど。

*4:t/08pager.tで失敗する。たぶん検索の書式の問題なので、分かっていればforce installしても大丈夫な気はする。

*5:バージョン文字列つかってるせいかなんかワーニング出てた気がする。

tokuhiromtokuhirom2006/03/09 19:49http://wiki.class-dbi.com/wiki/See_all_SQL
こういう方法もあります。

asakura-tasakura-t2006/03/09 22:01あー、DBIの機能を使えばいいのか。言われてみればそうですね。

nekokaknekokak2006/03/10 12:41DBIのトレースだと長文SQLが途中で切れたりしました。
見たいSQLに限って長文だったりするので、$itr->sqlはいい感じですね。

トラックバック - http://asakura.g.hatena.ne.jp/asakura-t/20060308
2004 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2007 | 02 | 03 | 04 | 05 | 06 | 07 | 10 | 11 | 12 |
2008 | 02 | 03 | 04 | 06 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 02 | 03 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2013 | 01 | 05 | 07 |
2014 | 01 | 02 |
2016 | 01 |
2017 | 01 |