SQL::Abstractは新しいのを使いましょう | hirosukeのblog

SQL::Abstractは新しいのを使いましょう

2年近く前にPerlで作られたシステムの改修の依頼をいただいての作業中に、Class::DBI::AbstractSearchで利用されているSQL::Abstractに、副作用のある箇所を見つけました。(とその時はおもったのです)


気がついたのは、DB操作の流れを確認したくてClass::DBIの発行するSQLとバインドされる値をトレースしていた時。


$where = {
'date' => [
'-and',
{
'>=' => '2007-03-30'
},
{
'<=' => '2007-03-31'
}
],
};


.....


my ($stmt, @bind) = $sql->where($where, $order);



みたいな処理の後、Data::Dumperで$whereの中身を見てみると


$VAR1 = {
'date' => [
{
'>=' => '2007-03-30'
},
{
'<=' => '2007-03-31'
}
]
};


こんな感じ。'-and' が消えちゃってる。


ありゃりゃ、と思ってSQL::Abstractのコードを追いかけてみたら、hashのdeep copyを行っている _anoncopyというメソッドが怪しい感じ。ちょこちょことパッチを書いてあててリトライすると


$VAR1 = {
'date' => [
'-and',
{
'>=' => '2007-03-30'
},
{
'<=' => '2007-03-31'
}
]
};


なおったっぽい。


たまにはパッチを作者の方に送ってみようかな、などと思ったのですが、ふとcpanを見てみたら、SQL::Abstractの最新版は1.22。改修中のシステムが使っているのは1.19。。。


あ゛~、とか思いながら最新版のコードを見たら、ちゃんと直ってました。


そりゃ、2年近く前のものだからねー。新しいのが出てないか、先に確認しなかった自分がうかつだよねー。まぁ、勉強にもなったし、などと思いつつ、ちょっと凹みました。