« 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


コメント