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

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

Version 1.3.159 (2011-08-13)

先日、h2の既知の不具合を踏みました。こんばんは。意外と綱渡りです。

  • Transactionalオプションをつけたテンポラリテーブルの新規作成時に、create table文中にインデックスが含まれていた場合、インデックスもトランザクショナルモードで作成されるようになった。例): create local temporary table temp(id int primary key, name varchar, constraint x index(name)) transactional
    • テンポラリテーブルのcreateの際に、transactionalをつけておくと、コミットされないんですね。
  • データベースファイルサイズが35%ずつ増加するようになった。しかし、一回の増分は最大で256MBまでとなる。
    • たぶん原文が間違っている。256MBではなく128MB。それぞれ、この修正の前は、20%、Integer.MAX_VALUE(!!)
  • ネットワーク設定周りのエラーメッセージの改善。
  • ビルドが./build.sh offlineでオフラインビルドをサポート。jarファイルが見つからなかった場合、依存しているjarを列挙する。
  • The BLOB / CLOB data was dropped a little bit before the table was dropped. This could cause "lob not found" errors when the process was killed while a table was dropped.
  • "group_concat(distinct ...)"がビュー、サブクエリで正しく動作していなかった(distinctが落ちてしまっていた) 例:select * from (select group_concat(distinct 1) from system_range(1, 3));
1.3.158 (2011-07-17)
sql> select * from (select group_concat(distinct 1) from system_range(1, 3));
GROUP_CONCAT(1)
1,1,1
(1 row, 78 ms)
sql> quit
Connection closed
1.3.159 (2011-08-13)
sql> select * from (select group_concat(distinct 1) from system_range(1, 3));
GROUP_CONCAT(DISTINCT 1)
1
(1 row, 31 ms)
  • データベースのURLをシステムプロパティ h2.urlMap を利用して、別のURLにマップできるようになった。
  • InputStream.skipを呼んだ時、既にBLOBの最後まで読み込んでいるのを読もうとして、"IO Exception: Missing lob entry: ..." [90028-...]. が発生して失敗する。
  • インメモリファイルシステムの"memFS:"が限定的にディレクトリをサポートした
  • リカバリのテストの為に、;RECOVER_TEST=64 をデータベースURLに追加した。これは、データベースファイルに対して64回書き込みが発生した後アプリケーションがクラッシュするのをシミュレートする。databaseName.h2.db.log がオペレーションのリストにより作成される。このリカバリはインメモリファイルシステムを使用してテストされる。そのため、大きなヒープを必要とするかもしれない。
  • 16進数の文字列表記をバイト列に変換するのが速くなった
  • SQL文 "shutdown defrag"により、シャットダウンが進行中にプロセスがkillされた場合に、データベースの不整合を引き起こす可能性があった。データベースの設定"defrag_always"が使用されている場合に同様の問題が引き起こされる可能性があった。