読者です 読者をやめる 読者になる 読者になる

seratch's weblog in Japanese

About Scala, Java and Ruby programming in Japaense. If you need English information, go to http://blog.seratch.net/

Generalized type constraints in ScalikeJDBC

ScalikeJDBC の SQL ビルダーを Generalized type constraints を使った実装に変更しました。1.3.0 としてリリースされています。

Generalized type constraints って?

Generalized type constraints については最近だとこちらの記事などが参考になります。

http://d.hatena.ne.jp/tototoshi/20120602/1338624041

試してみる

以下は sbt console で簡単に確かめるための設定です。興味のある方はお試しください。

どう変わったか

1.2.3 までは SQL#map(WrappedResultSet => A) を呼び忘れていた場合に実行時例外となりました。実行時エラーではあるものの

No extractor is specified. You need to add #map((WrappedResultSet) => A) before #apply().

という比較的わかりやすいメッセージを出すようにしていました。

今回、コンパイルエラーとして検知できるという大きなメリットがある反面、エラーメッセージは「=:=」を知らないユーザの方を想定すると少し厳しめにはなっているかもしれません。

Cannot prove that scalikejdbc.SQL[Nothing,scalikejdbc.NoExtractor] =:= scalikejdbc.SQL[Nothing,scalikejdbc.HasExtractor].

ドキュメントで何もフォローされていないのはさすがに不親切かと思い、簡単ではありますが Wiki に追記しておきました。

https://github.com/seratch/scalikejdbc/wiki/GettingStarted

フィードバックなど GitHub もしくは Twitter でお待ちしています。

(追記)

コメントいただきました。エラーメッセージはコピペしてきて書き換えれば改善できるとのことで実際に試してみました。

(さらに追記)

実装しました。abstract クラスに定義するとうまくいかなかったので object にして必要なところで import するようにしました。

https://github.com/seratch/scalikejdbc/commit/7d32b070b0f9546ef59a76b4a70e3f7b79a9cd24