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.
- https://github.com/tokuhirom/tinyorm/commit/01731932824159e4ac76d715891c4e0c1b8a7f85
- https://github.com/tokuhirom/jdbcutils/commit/ff018d79147ebc619724266c1fa6b1ceb64e9fd7
Published: 2015-05-07(Thu) 23:24