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年近く前のものだからねー。新しいのが出てないか、先に確認しなかった自分がうかつだよねー。まぁ、勉強にもなったし、などと思いつつ、ちょっと凹みました。