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

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

Version 1.3.176 (2014-04-05)

今回から、1.4Betaでの変更内容がchangelogに載るようになったようです。最近リリース間隔が広くなってきているので、1.4までは半年くらいかかるのかな。

試してはいませんが、MV_STOREも大分速くなってきたようです。1.4ではデフォルトのストアが現行のPageStoreから切り替わる事になっているので、ここらへんのチューニングが肝ではあるのでしょう。あと、今回はchangelogsvnのコミットログがあまりきっちり対応してなくて見にくかった(ような気がする)

  • ファイルロックのためのメソッド 'serialized' がドキュメントに記載されなくなった。これは、version 1.4 で削除されます。
  • スタティックメソッド Csv.getInstance() が削除された。代わりにパブリックなコンストラクタを使用する事。
  • Script, RunScript, Shell 及び CreateCluster のデフォルトユーザ名が"sa"ではなく、空文字列になった。
  • "そのオブジェクトはクローズされています"という例外のスタックトレースがデフォルトではログに出力されなくなった
  • 結果セットの値自体が結果セットだった場合、結果自体が一度しか読まれなくなった(再利用される)
  • カラムの制約がViewから見えるようになった
  • 既に権限がついているテーブルに対しての追加の権限の付与が動作しなかった
    • ここらへん、細かく制御してるところってどれくらいあるもんなんですかね(自分はWebアプリ界隈ですが、実質制御なしにしているところが多い印象)
    • 1.3.175
sql> create role new_role;
(Update count: 0, 0 ms)
sql> create table hoge(id int);
(Update count: 0, 1 ms)
sql> grant select on hoge to new_role;
(Update count: 0, 2 ms)
sql> select * from information_schema.table_privileges;
GRANTOR | GRANTEE  | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE
null    | NEW_ROLE | UNNAMED       | PUBLIC       | HOGE       | SELECT         | NO
(1 row, 3 ms)
sql> grant insert on hoge to new_role;
(Update count: 0, 1 ms)
sql> select * from information_schema.table_privileges;
GRANTOR | GRANTEE  | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE
null    | NEW_ROLE | UNNAMED       | PUBLIC       | HOGE       | SELECT         | NO
(1 row, 1 ms)
    • 1.3.176
sql> create role new_role;
(Update count: 0, 1 ms)
sql> create table hoge(id int);
(Update count: 0, 0 ms)
sql> grant select on hoge to new_role;
(Update count: 0, 3 ms)
sql> select * from information_schema.table_privileges;
GRANTOR | GRANTEE  | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE
null    | NEW_ROLE | UNNAMED       | PUBLIC       | HOGE       | SELECT         | NO
(1 row, 4 ms)
sql> grant insert on hoge to new_role;
(Update count: 0, 2 ms)
sql> select * from information_schema.table_privileges;
GRANTOR | GRANTEE  | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | PRIVILEGE_TYPE | IS_GRANTABLE
null    | NEW_ROLE | UNNAMED       | PUBLIC       | HOGE       | SELECT         | NO
null    | NEW_ROLE | UNNAMED       | PUBLIC       | HOGE       | INSERT         | NO
(2 rows, 12 ms)
  • Spatial index: 幾つかのバグが修正された(空間制約がビューの中で使われているとき、TCP/IP上でジオメトリオブジェクトが転送するとき、必要に応じジオメトリオブジェクトが必要に応じてコピーされたとき)
    • カッコの中の部分の原文は"(using spatial constraints in views, transferring geometry objects over TCP/IP, the returned geometry object is copied when needed)"
  • Issue 551: データタイプについてのドキュメントが不正確だった
  • Issue 368: 複数行のinsertに対して、ON DUPLICATE KEY UPDATEが動作していなかった
  • OSGi: javax.toolsパッケージがインポートされた(オプションとして)
  • H2 Console: オートコンプリートがデフォルトでは無効に。ただしホットキー(Ctrl+Space)は有効
  • H2 Console: オートコンプリートが複数行ステートメントで無効だった
  • CLOBとBLOGデータがロールバック後即座に削除されていなかった
  • H2内部の型をサポートする新しい集約APIの追加
    • org.h2.api.Aggregateインターフェースが追加になっています。
  • 参照整合性制約が間違ったインデックスを使ってしまうことがあり、参照されるテーブル内で更新された行が整合性違反で不正に更新に失敗することがあった
  • ポーランド語翻訳が完了
  • Issue 545: 不要な重複コードの削除
  • プロファイラツールがフルスレッドダンプを含むファイルを扱えるようになった
  • MVStore: ファイルフォーマットが少し変更された
  • MVStore mode: CLOBとBLOBストレージが再実装され、現在デフォルトのPageStoreよりもずっと速くなった
  • MVStore mode: インデックスの作成がかなり速くなった(多くの場合デフォルトのPageStoreよりも速い)
  • 多様なMVStore関連の不具合の修正。これには、R-tree実装のバグも含む。保存時に一時的なIOExceptionが発生した場合、データベースが不整合になる可能性がある。
    • 原文は"Various bugs in the MVStore storage and have been fixed, including a bug in the R-tree implementation. The database could get corrupt if there were transient IO exceptions while storing."
  • メソッドorg.h2.expression.Function.getCostがNullPointerExceptionをスローする可能性がある
  • 新規データベースでLOBを個別のファイル(メインのデータベースファイル外)へ保存をサポートしなくなった
  • Lucene 2 がサポートされなくなった
    • Lucene 3 はサポートされている...といいつつ今Luceneの最新は4.7だったりするわけで...
  • SEQUENCEのデフォルトのMINとMAXの算出についてのバグ修正
  • IGNORECASE=TRUE で、複数の値を使った IN を含むクエリを処理する際のバグ修正
  • アプリケーションの内部から呼び出せるようにエントリポイントを org.h2.tools.Shell に追加
  • pgServerが停止と起動を複数回繰り返すのを避ける対応のバグ修正
    • いまいち良く分からない 原文は、"Fix bug that prevented the PgServer from being stopped and started multiple times."
  • MySQL向けのDDLの追加サポート
    • ALTER TABLE の CHANGE 構文が追加になったようです。
alter table test change column id id2 int
  • Issue 548: TO_CHARが月もしくは日が1桁の時にMMとDDが正しくフォーマットしていなかった
  • ALIASのvarargsサポートのバグ修正