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

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

Version 1.3.172 (2013-05-25)

MVStore周りの修正が多いですが、オプティマイザでインデックスを選択する際にorder byの項目もコスト計算に含めるようになったりとちょっと面白い。あと、CREATE ALIASでGroovyが使えるようになったというのは、結構面白いのではないかと。

  • 参照整合性: 参照整合性制約追加に失敗した時、自動的に作成されたインデックスが削除されていなかった
  • 自動アナライズ機能で、今後はテーブル毎に10000行の代わりに1000行しか読まなくなった
  • IN(...)クエリとORを組み合わせた場合、最適化により"列 x はリストによりグループ化されなければなりません"という奇妙な例外が発生していた
    • 簡単には再現しなかった。しかし、x = 1 or x = 2 はx in (1,2)に最適化されたが、x = 1 or x = 2 or x = 3はx in (1,2) or x = 3にしか最適化されない?っぽい。
    • と思ったら、1.3.172で最終的には最適化された。
  • Issue 454:型安全なキャラセットの使用
  • LIMIT と OFFSETを同時に使ったクエリでIllegalArgumentExceptionをスローする可能性があった
  • MVStore: 複数のIssueのクローズ。460,461,462,464,466。
  • MVStore: 大きなストア(数GB)が少々速くなった
  • ローカルのテンポラリテーブルを使っていて、セッションを閉じる前にドロップせず、プロセスがキルされた場合にデータベースがオープンできなくなった(リカバーツールの使用なしでは)
  • Oracleとの互換性向上のための、TRUNC(timestamp)のサポート。
    • とはいえ、引数を省略した場合のみ。TRUNC(timestamp,fmt)はサポートされない これ書いている間にバグ発見してレポート。次のリリースでなおる模様。
  • PostgreSQL互換性向上のための、CREATE TABLE TEST(ID BIGSERIAL)のサポート
  • 照合順序についての新しいコマンド、SET BINARY_COLLATION UNSIGNEDの追加。これは、MySQLモード時のBINARYカラムのテストに便利。
  • Issue 453: TABLE LINKのコネクションの共有において、ABBA型の競合状態が発生していた。
  • Issue 449: PostgreSQLのSERIALデータ型は自動的にプライマリーキーと認識されるべきではない
    • PostgreSQLモードのときだけ、SERIAL/BIGSERIALが自動的にプライマリーキーにならなくなったんですが、それでいいのか。
  • Issue 406: "select h2version()"のサポート。
    • 一見たいした事ない機能追加でしたが、意外と紆余曲折あり。最初はversion()関数として実装されたものの、PostgreSQLODBCドライバーが返り値に"PostgreSQL"で始まる何かを返すVERSION()関数があることを前提としていて云々。
  • Issue 389: 複合主キーが存在する場合に、必ずしも正しいインデックスを引けるとは限らない。
    • タイトルはそんな感じのものの、実際は、indexA X(a,b)とindexB X(a,c)があったときに、select * from X where a = 1 order by a,cというSQLがきた場合に、order by もコスト計算にいれた上でindexを選択するように対応されている。
  • Issue 305: SELECT … FOR FETCH ONLYのサポート
    • まぁ、エラーにせずに読み飛ばすようになっただけなんですが。
  • Issue 274: Sybase/MSSQLServer 互換性: GETDATE,CHARINDEXのシステム関数の追加
  • Issue 274: Sybase/MSSQLServer 互換性: CONVERT関数の引数の入れ替え
  • Issue 274: Sybase/MSSQLServer 互換性: INDEX節のサポート 例: "select * from test (index table1_index)"
    • これも読み飛ばす。
  • SELECT * FROM A WHERE X=1 OR X=2 OR X=3 を SELECT * FROM A WHERE X IN (1,2,3) に最適化する際の不具合修正
  • Issue 442: SourceCompilerへのGroovyパッチ。
    • classpathにGroovyのjarがあれば、CREATE ALIASでGroovyを使って関数がかけるようになった模様。サンプルはちょっと地味ですが。
  • Issue 459: LOBのドキュメンテーションの改善
    • LOB周りの実装とドキュメントが食い違っていたのでその修正。LOBの実態がどこに置かれるか、システムプロパティのMAX_LENGTH_INPLACE_LOGがどこに影響するか、など。