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

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

Version 1.3.156 (2011-06-17)

送ったパッチが採用されたリリース。

  • Issue 323: IN(...)とファンクションテーブルを一緒に使うとNullPointerException(が発生していたのを修正)
  • Clob.toString() と Blob.toString() に識別用の名前が含まれるようになった。
    • 元々含めていたつもりだったようだけど、バグで含まれていなかった模様。二項演算子より+の方が勝つのね。
 return getTraceObjectName() + ": " + value == null ? "null" :
value.getTraceSQL()
  • SQLパーサが'^'や'\'の様な文字を黙って無視していた。現在はシンタックスエラーがスローされる。
  • ROUND(..)が、パラメータ一つのときでも動作するようになった。
  • 非アドミンユーザによるシステムテーブルへのアクセスがより限定されるようになった(それらのテーブルはまだ一覧に表示されるが、一部のデータが含まれないようになった)
    • 非アドミンユーザでUSERSテーブルを見ると、自分しか見えないとかそんな感じ。
  • BLOB: InputStream.skipが組み込みモードでより効率的になった。
  • カラムのデフォルト式がテーブルを参照しないようになった。なぜならそのようなテーブルを持つデータベースが正常にオープンできないから。
    • 実際影響があるのは、ALTER TABLE xxx ALTER COLUMN yyy set default zzz の時。なんだけど...。
  • check constraintで参照されているオブジェクトがドロップされる可能性があり、結果データベースが正常にオープンできなくなることがあった。
  • Oracleとの互換性の向上(NVL2関数)
  • CSVREADで'preserveWhitespace'オプションの追加
    • デフォルトはfalseで、CSVの各項目がトリムされる。
  • 多くの行を伴う再帰クエリで、IndexOutOfBoundsExceptionがスローされる事があった
    • auto-serverモードはインメモリデータベースと組み合わせる事が出来ない。この無効な組み合わせはここまで検出しなかった。現時点では、その組み合わせでデータベースを開こうとすると失敗する。
  • date型とtime型の値の読み書きのパフォーマンスの改善。
  • Java関数: 配列の型情報が保持されるようになった。Java関数がIntegerを返す時、ResultSet.getObject()もIntegerを返す。コンポーネント型はネットワークを超えるが、現時点ではデータベースに永続化されるわけではない。
  • Recover tool: 全文検索が利用されている場合、リカバーツールによって生成されたスクリプトが動作しなかった。トリガーが主キーよりも前に作られていたため。
  • Issue 321: XA prepareなしのXA rollabackを想定していなかった(不要な例外が .trace.dbファイルに記録されていた)
  • Read-only database: 読み込み専用データベースでいくつかのクエリ(distinctのような)でテンポラリテーブルを作ろうとして失敗していた。
  • テンポラリファイルをのぞき、finalize()を使用しなくなった。システムプロパティの"h2.runFinalize"はサポートしなくなった。クローズされていないコネクションは検出されるが、そのコネクション開始のスタックトレースはコネクションが再びクローズされなかった時(二度クローズされていないコネクションと開始された時)。閉じられていないコネクションを検出するために、PhantomeReferenceが使用されている。
  • Issue 322: from句にサブクエリが使われている時、左外部結合が動作していなかった。
  • 結果セットを返すCALLのプリペアドステートメントを複数回実行した場合、NullPointerExceptionがスローされる事があった。
  • 以下の組み込み関数が決定的とマークされた。従って、プリペアドステートメント内で再実行されなくなった。LOCK_TIMEOUT,LINK_SCHEMA, CANCEL_SESSION, FILE_READ.
  • NOT NULLのカラムを指定したCOUNTが、COUNT(*)に最適化されるようになった。
  • 以下のプリペアドステートメントが同様にキャッシュされるようになった。insert, update, delete, call,merge 及びトランザクショナルコマンド。
    • 及び?等の?
  • 組み込みのコネクションプールが少々速くなった。
  • CREATE TABLE AS SELECTにて、カラム定義を明示的に行わない場合、スケールが正しくセットされないケースがあった。
  • TCP/IPを使ってサーバに接続しようとして失敗した場合、長くともタイムアウトまでしかリトライしないようになった。以前は、タイムアウトとリトライ回数を掛けた時間かかっていた。