H2Databaseを追っかけていたりしたブログ

H2 database のリリースノートを読んだりとか。

Version 1.3.170 (2012-11-30)

忘れてたけど一年ぶりくらいにパッチを送ってたのだった。
今回のリリースはIssueからの不具合修正が多いです。リリースノートには挙げられていませんが、MVStoreのベースになるmultiversionmapがメインのソースツリーに入ってきています。

  • Issue 407: TriggerAdapterがCLOB/BLOBカラムと動作していなかった。
    • H2のTriggerインターフェースは行毎の実行の場合は、void fire(Connection conn, Object oldRow, Object newRow) throws SQLException を実装する形となっていて、それをvoid fire(Connection conn, ResultSet oldRow, ResultSet newRow) throws SQLExceptionにするアダプターがTriggerAdapterなのだけれど、そのoldRow/newRowにCLOB/BLOBが含まれていたらClassCastExceptionが発生していたようです。
  • PostgreSQL compatibility: AUTO_INCREMENTのエイリアスとしてデータ型BIGSERIAL型とSERIAL型をサポート。
  • Issue 417: H2 Console: webのセッションタイムアウトが動作しておらず結果としてメモリリークになっていた。これは、H2 Consoleを長時間開いていて、多くのセッションが張られているときのみ問題になる。
  • Issue 412: サーバーツールを"-browswer"オプションのみで起動した場合、警告がログ出力されるようになった。
    • webオプションなしでbrowserオプションをつけても仕方がないので。
  • Issue 411: CloseWatcherの登録が同時実行セーフではなかった。
    • conncurrency-safeとあるけど、実装上は普通にthread safeなのだけど、意図はあるのだろうか。
    • HashSetで管理されていたのを、Collections.synchronizedSetに変更しています。
  • MySQL compatibility: CONCAT_WSのサポート。
    • MySQL互換性と言う事で、最近PostgreSQLにも入ったCONCAT_WS。
  • 外部キー制約を検証するために間違ったユニークキー制約を使用していたバグを修正。
    • 原文は、"Fix for a bug where we would sometimes use the wrong unique constraint to validate foreign key constraints."なんだけど、sometimes?
  • RUNSCRIPTコマンドでBOMで始まるファイルをサポート
    • Windowsのメモ帳でちょろっと書いてしまったりしても大丈夫に。
  • SET @X = IDENTITY() でNULLが不正に返るのを修正
  • 制約とH2-Log-Writerスレッドの間でのデッドロックを修正
  • IN(...)のすべての値が定数で同じ型の場合の最適化
  • Restore tool: パラメータ "quiet"が使用されていなかったため削除
  • テーブルの作成とSHOW TABLESが並列に実行された場合のConcurrentModificationExceptionを修正
  • システムプロパティ"h2.javaObjectSerializer"を使用する事でシリアライゼーションがプラガブルになった