Blog

jdbcutils と tinyorm に問題が見つかったのでメジャーバージョンアップした

jdbcutils 2.0.0 と tinyorm 1.0.0 を出しました。

ざっくり言うと、getColumnLabel() を呼ぶべきところで getColumnName() を呼んでいたので、正しい方に変えた、という話。

getColumnLabel()getColumnLabel() の違いというのはつまり以下のような状況です。x がカラム名で y がカラムラベル。

    SELECT x AS y FROM z;
           ^                    x: getColumnName()
                ^               y: getColumnLabel()

よって、AS を使うなりなんなりして別名でラベルを貼っていない限りは関係ないです。社内のコードを確認した範囲だと影響あるコードはなさそうでした。

変更をいれた箇所は二箇所で

* JDBCUtils#executeQueryMapList()
* TinyORM#searchBySQL, TinyORM#searchBySQLWithPager

です。

searchBySQL で AS を元の名前から別の名前つけてるケースで問題が起きそうに見えますが、実際には AS で別名をつけててもその名前で取り出せていなかったので、バグっていたコードがたまたま動いていたのが動かなくなるというケースが考えられる程度です。

つまり以下のようなコードは今までうっかり動いていたけど、動かなくなるよ、と(正しくは x.getExtraColumn("y"))。

    List<X> xs = orm.searchBySQL(X.class, "SELECT x AS y FROM z");
    for (X x:xs) {
        System.out.println(x.getExtraColumn("x"));
    }

ただ、この挙動になったら普通は「あれれ~おかしいぞ~」となって気づくはずなので、発生していないはずです。 (というか実際自分はそのケースになって気づいた)

ref.