次のようなPerl DBIx::Class検索があります。
my $rs = shift->search( {
-and => [
{ 'for_revocation' => 1 },
[
{
status => {
'not_in' => [ 'revoked', 'revoking']
},
},
{
status => 'revoking',
updated => {
'<' => \'now() - interval 1 hour'
}
},
]
]
});
そして、私は..
$rs->update({ status => 'revoked' });
しかし、私はエラーが発生します...
DBI 例外: DBD::mysql::st の実行に失敗しました: SQL 構文にエラーがあります。1 行目の 'FOR REVOCATION '1' )' の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください [for Statement "UPDATE wmv_attempt SET status = ? WHERE ( ARRAY(0xadf93a8) FOR REVOCATION ? )" with ParamValues: 0='revoking', 1=1] (eval 20938) 行 1
$rs->as_query()
検索に使用する SQL を取得する場合、次のようになります。
SELECT .... FROM wmv_attempt me WHERE ( ( ( status NOT IN ( ?, ? ) OR ( status = ? AND
updated < now() - interval 1 hour ) ) AND for_revocation = ? ) )
これはうまくいきます。
update()
結果セットで実行すると、WHERE句を正しく作成できないようです。
これはバグだと思います。
誰かが私が間違っているかもしれないことや別のアプローチを提案できますか?
ありがとう、トム