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

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

Version 1.3.165 (2012-03-18)

細かいけど、使いやすくなるいくつかの改修が含まれています。数値の文字列表現のとか、SUBSTRのとか、ALTER TABLE ADD で複数カラムが一度に追加可能になったとか、UPDATE文でLIMITをサポートとか、CSVTOOLでヘッダなしで出力可能になったとか。

  • より良い数値の文字列表現(0E-26の代わりに0.00000000)
create table hoge (val dec(20,15));
insert into hoge values (0.000000006);
select * from hoge;

-- 1.3.159
sql> select * from hoge;
VAL
6.000000E-9

-- 1.3.165
sql> select * from hoge;
VAL
0.000000006000000
  • PreparedStatementsでデータタイプも含め同じだった場合のみ再利用されるようになった
    • 以前は、PreparedStatemetsが再利用される条件が、データの一致のみだったのが、さらに型の一致も求められるようになっています。
  • 参照整合性制約に関するエラーメッセージに、その具体的な値が含まれるようになった
  • SCRIPT and RUNSCRIPT: パスワードをプリペアドステートメントを使用してセットできるようになった。以前はSQL文中にリテラルで記述する必要があった。
  • MySQL compatibility: SUBSTRでマイナスの開始位置を指定したとき、MySQL同様に動作するようになった。
-- 1.3.159
sql> select substr('ABCD',-1,3);
'ABC'
ABC
(1 row, 0 ms)
-- 1.3.165
sql> select substr('ABCD',-1,3);
'D'
D
(1 row, 0 ms)
  • autocommitを有効にしたとき、その時点でのトランザクションがコミットされるようになった(JDBC APIで求められる動作)
  • シェルスクリプト h2.sh がパス中にスペースが含まれていると動作しなかった。引数のリストにダブルクォートで囲まれたスペースを含んでいても動作するようになった。
  • コミットされていないトランザクションのせいでトランザクションログが切り捨て出来なかった場合、"Transaction log could not be truncate"が .trace.db ファイルに出力されるようになった。以前はデータベースファイルが肥大化してもその原因が何によるものか調べることができなかった。データベースファイルの肥大化を避けるために、新しい機能として、古いトランザクションの自動ロールバックが利用可能になった。有効にするには、データベースURLに;LOG_SIZE_LIMIT=32を追記する(この場合、トランザクションログが32MBになった場合もっとも古いセッションがロールバックされる)
  • ALTER TABLE ADD が一度に複数のカラムを追加できるようになった。
  • Issue 380: ALTER TABLE ADD FOREIGN KEY で明示的にインデックスを指定していた場合に、そのインデックスが利用可能かチェックしていなかった。これにより、後々NullPointerExceptionを引き起こしていた
  • Issue 384: UNIONと不正なORDER BY句で間違った例外(NullPointerException)がスローされていた
  • Issue 362: UPDATE文でのLIMITがサポートされた
  • Browser: デフォルトのブラウザが設定されていない場合、利用可能ならばGoogle Chromeが利用されるようになった。以前は利用可能であれば、Konqueror, Netscape, Operaが利用されていた。
  • CSV tool: ヘッダ行を出力しない機能(writeColumnHeaderオプション)
  • CSV tool: カラム名のケースセンシティブを保持する機能(caseSensitiveColumnNamesオプション)
  • PostgreSQL compatibility: PostgreSQLモードにてLOG(x)が基数を10とするようになった。