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

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

Version 1.2.145 (2010-11-02)

個人的に、バグとしてあげたら仕様と返されたIssueがあった思い出深いバージョンです。

  • 新しいStringのキャッシュが5秒毎に作られるようになった。これにより、OutOfMemoryExceptionの発生が不自然に遅延することはなくなった
  • データベースをクローズした後、writerスレッドが遅くとも100ms後には停止するようになった(以前は1秒)
  • プロセスがkillされて、コンパクションが完全に終わっていない場合、巨大なデータベースをオープンするときに失敗する可能性があった(ユニークなトランザクションログが再利用されるため)
  • システムプロパティのh2.functionsInSchemaViewが有効な場合にViewがスキーマをストアするようになった
  • すでにクライアントサイドのLOBが削除されていた場合のエラーメッセージが改善された
  • StatementもしくはPreparedStatementがクローズされると同時に実行された場合、分かりにくい例外が発生していた(Issue 241)
  • LOBファイルが圧縮されている(compress_lob lzfがセットされている)場合に、リカバーツールが動作していなかった。また、リカバーツールが非常に遅いケース(特に64bitJVM使用時)があった(圧縮されていない場合でも解凍を試みるため。その際多大なメモリをアロケートする)
  • H2Console: プロパティファイル内に存在しない場合に webAllowOthers と webSSL が入れ替わってしまっていた(Issue 244)
  • システムプロパティh2.lobInDatabaseがセットされていた場合に、CREATE TABLE ... AS SELECT でLOBのカラムを持つ場合に常に失敗してしまっていた。
  • いくつかのシステムプロパティについては、データベースURLでセットできるようになっているのでサポートされなくなった。CACHE_SIZE_DEFAULT, CACHE_TYPE_DEFAULT, DEFAULT_LOCK_MODE, LOCK_MODE_READ_COMMITTED, DEFAULT_MAX_LENGTH_INPLACE_LOB, DEFAULT_MAX_LENGTH_INPLACE_LOB2, DEFAULT_MAX_MEMORY_UNDO, DEFAULT_MAX_OPERATION_MEMORY, DEFAULT_PAGE_SIZE, DEFAULT_RESULT_SET_CONCURRENCY, MIN_WRITE_DELAY.
  • いくつかのシステムプロパティはデータベースレベルの設定に置き換えられた。ALIAS_COLUMN_NAME, ANALYZE_AUTO, ANALYZE_SAMPLE, DATABASE_TO_UPPER, DEFAULT_ESCAPE, DEFRAG_ALWAYS, DROP_RESTRICT, ESTIMATED_FUNCTION_TABLE_ROWS, FUNCTIONS_IN_SCHEMA, LARGE_RESULT_BUFFER_SIZE, LARGE_TRANSACTIONS, MAX_COMPACT_COUNT, MAX_COMPACT_TIME, MAX_MEMORY_ROWS_DISTINCT, MAX_QUERY_TIMEOUT, NESTED_JOINS, OPTIMIZE_DISTINCT, OPTIMIZE_EVALUATABLE_SUBQUERIES, OPTIMIZE_INSERT_FROM_SELECT, OPTIMIZE_IN_LIST, OPTIMIZE_IS_NULL, OPTIMIZE_OR, OPTIMIZE_SUBQUERY_CACHE, OPTIMIZE_TWO_EQUALS, OPTIMIZE_UPDATE, PAGE_STORE_INTERNAL_COUNT, PAGE_STORE_TRIM, QUERY_CACHE_SIZE, RECOMPILE_ALWAYS, RECONNECT_CHECK_DELAY, SELECT_FOR_UPDATE_MVCC, SHARE_LINKED_CONNECTIONS. データベース設定の詳細についてはJavaDocを参照してください。システムプロパティについては後方互換性のためにまだサポートされています。
  • システムプロパティのh2.nestedJoinsが有効になっていた場合、outer joinで間違った結果を返すことがあった。
  • データベースのオープン時にNullPointerExceptionが発生することがあった。
  • クラッシュした後、データベースファイルが十分にシュリンクされなかった。これは、古いトランザクションログがファイルから削除されていなかったことによる。
  • CallableStatementのいくつかのメソッドにおいて、NullPointerExceptionが発生することがあった。
  • DROP ALL OBJECTSの実行中に、LOBファイルが削除されなかった。
  • MS SQL Server 互換性: 頭に"N"のある文字リテラルのサポート(Issue: 240)
  • CAST: 文字列からバイナリに変換するとき16進数表記として扱われる(バイト毎2文字) 16進数表記の文字列は、一旦バイナリにコンバートされてから数値に変換される。例) CAST(CAST('FFFF' AS BINARY) AS INT) = 65535, CAST(65535 AS BINARY) = '0000FFFF'.
  • ユーザ定義タイプがユーザ定義関数を含んでいた時、データベースがオープンできなかった。
  • CAST('011' AS INT)は8進数として変換(Integer.decodeを使用していた)されなくなった。現在はInteger.parseIntで変換される。byte,short,longに対しても同様。これは、8進数をCASTで変換しようとすると失敗することを意味する。
  • リカバーツールスクリプトの中のテーブルでキーの重複があった場合にインポートできなかった