次のようなクエリを実行しています。
INSERT INTO `ABC` (
`col1`,
`col2`)
SELECT
`t`.`col1`,
`t`.`col2`
FROM (
SELECT
`opr`.`col1`,
@counter := IF(@var_2 = `opr`.`col_2`, @counter + 1, 1) AS `counter`,
@val_2 := `opr`.`col2`
FROM
(...Some select ...) `opr`
) t
このクエリを SequelPro (SQL エディター) で実行すると、問題なく動作します。ただし、org.skife.jdbi を (@SqlUpdate として) 使用してこれを実行すると、ユーザー定義変数 @counter は常に 1 になり、間違った更新が生成されます。
さらに、この更新クエリをストアド プロシージャにワープしてみました: - SequelPro から SP を呼び出すと、正しい結果が得られます。- JDBI から SP を呼び出すと、間違った結果が返されます (@counter == 1)。
Java が実行している SQL クエリは正しい (Java が実行しているものを確認するために MySQL ログを調べた) が、明示的なクエリを呼び出すか、自分のクエリ。
アイデア?これは JDBC または org.skife.jdbi のバグですか?