Generalized type constraints in ScalikeJDBC
ScalikeJDBC の SQL ビルダーを Generalized type constraints を使った実装に変更しました。1.3.0 としてリリースされています。
Generalized type constraints って?
Generalized type constraints については最近だとこちらの記事などが参考になります。
試してみる
以下は 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