H2 Version 1.2.138 (2010-06-27)
今回もあまり変更点は多くありません。「1.3になったらこれがデフォルト」というのも数多く出てきているのでそろそろ1.3に移行するのかな、とか。
そういえば、中国のH2 google groupがなくなってますね。撤退したからなんでしょうが、今回ようやく気がついた。
•参照整合性制約: 子テーブル側で、外部キーがnullだった場合に、親テーブルでキーがnullの行を削除できなかった。ちょっと分かりにくいですね。下記の例はv1.2.137での例ですが、最後の参照整合制約違反がv1.2.138では発生しません。
sql> create table hogea(id int,name varchar); create table hogeb(id int,name varchar, ida int references hogea(id)); (Update count: 0, 0 ms) sql> (Update count: 0, 0 ms) sql> insert into hogea values (null, 'test'); (Update count: 1, 0 ms) sql> insert into hogeb values(1,'test2',null); (Update count: 1, 0 ms) sql> insert into hogeb values(1,'test3',3); Error: org.h2.jdbc.JdbcSQLException: 参照整合性制約違反: "CONSTRAINT_4: PUBLIC.HOGEB FOREIGN KEY(IDA) REFERENCES PUBLIC.HOGEA(ID)" Referential integrity constraint violation: "CONSTRAINT_4: PUBLIC.HOGEB FOREIGN KEY(IDA) REFERENCES PUBLIC.HOGEA(ID)"; SQL statement: insert into hogeb values(1,'test3',3) [23002-137] sql> delete from hogea; Error: org.h2.jdbc.JdbcSQLException: 参照整合性制約違反: "CONSTRAINT_4: PUBLIC.HOGEB FOREIGN KEY(IDA) REFERENCES PUBLIC.HOGEA(ID)" Referential integrity constraint violation: "CONSTRAINT_4: PUBLIC.HOGEB FOREIGN KEY(IDA) REFERENCES PUBLIC.HOGEA(ID)"; SQL statement: delete from hogea [23003-137]
•実験的機能: ケースセンシティブなカタログ名のサポート。h2.databaseToUpperをfalseにすると利用可能。1.3系では、falseがデフォルトになる。
•実験的期ののサポート: ネステッドジョインのサポート。h2.nestedJoinsプロパティをtrueにすることで利用可能。ネストした結合と、右外部結合が期待通りに動くようになります...が、現状デフォルトにはならないんですね。なにか不都合があるんでしょうか。1.3系ではtrueがデフォルトになるようです。
•サンプルアプリケーションの追加: CachedPreparedStatements.
•スキーマを指定してファンクションを作成した場合に、viewやネストしたクエリや制約中で使用できなかった不具合の修正。
•ベンチマークで使用するデータベースのバージョンを新しくした
•Version 1.2.137 がJava1.4にコンバートしてビルドできなかったので、それの修正
•クラスター: アドミン権限を保有していないユーザーが、1ノード落ちたクラスター化データベースに接続できない不具合の修正。これでもうちょっとちゃんと使えるようになります。
•DROP VIEW で CASCADE と RESTRICT のサポート。デフォルトはRESTRICT。RESTRICTだと、viewに依存したviewがある場合、削除できません。CASCADEだと、依存しているviewも削除されます。Oracleだと無効になりますね。
sql> create table hoge(id int, txt varchar, day date); (Update count: 0, 0 ms) sql> create view vhoge as select id, txt from hoge; (Update count: 0, 15 ms) sql> select * from vhoge; ID |TXT (0 rows, 94 ms) sql> create view v2hoge as select * from vhoge; (Update count: 0, 0 ms) sql> drop view vhoge restrict; Error: org.h2.jdbc.JdbcSQLException: "V2HOGE" が依存しているため、"VHOGE" をドロップすることはできません Cannot drop "VHOGE" because "V2HOGE" depends on it; SQL statement: drop view vhoge restrict [90107-138] sql> drop view vhoge cascade; (Update count: 0, 0 ms) sql> select * from v2hoge; Error: org.h2.jdbc.JdbcSQLException: テーブル "V2HOGE" が見つかりません Table "V2HOGE" not found; SQL statement: select * from v2hoge [42102-138]
•CREATE VIEW で、OR REPLACE のサポート
•ビルドツール: 単一のテストケースが実行可能に。(build -Dtest=org.h2.test.db.TestViewDropView)