4

次のような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句を正しく作成できないようです。

これはバグだと思います。

誰かが私が間違っているかもしれないことや別のアプローチを提案できますか?

ありがとう、トム

4

0 に答える 0