« NONDRINKING | メイン | 本日の体操 »
2006年10月03日
[技術] Class::DBI::Sweet->page bug?
Class::DBI::Sweet 0.08のpage() methodは、バグが多いかも
まず、検索条件にbetweenを以下のように使うと
{'startdate' => { -BETWEEN => [$syymmdd, $eyymmdd] } }
以下のようにエラーになってしまう。プレースホルダーのバインディングがずれしまっているような感じ。
Caught exception in XC::Controller::Article->search "XC::Model::DB::Article can't SELECT me.articleid FROM article me WHERE ( me.startdate BETWEEN ? AND ? ) ORDER BY startdate DESC LIMIT ? OFFSET ? : DBD::Pg::st execute failed: ERROR: invalid input syntax for integer: "2006-07-01" [for Statement "SELECT me.articleid FROM article me WHERE ( me.startdate BETWEEN ? AND ? ) ORDER BY startdate DESC LIMIT ? OFFSET ? " with ParamValues: 2='2006-07-01', 1='2006-06-01', 3='5', 4='0'] at /usr/lib/perl5/site_perl/5.8.8/DBIx/ContextualFetch.pm line 52. at /home/y-ishiha/catalyst/XC/script/../lib/XC/Controller/Article.pm line 336"
バグだと思いながら、ググるとこんなのがあり、やっぱりバグっぽい。しかも、全然直す気がないかも。
それじゃ、検索条件の記述方法を変えてみようと以下のようにする
{ 'startdate' => { '>=' , $syymmdd }, 'startdate' => { '<=' , $eyymmdd }
エラーにはならないが、検索結果がおかしい。「$eyymmdd以下」という条件しか、適用されていない。たぶん、startdateを2回記述しているので、ハッシュに格納する段階で、後ろにある条件で上書きされてしまっているみたい。
orz
投稿者 nekobara : 2006年10月03日 22:38