2010-01-01から1年間の記事一覧
1.3系のプレビュー版です。 これはベータバージョンです。次のバージョンは1.2.147となります。1.2系と1.2系の相違点は以下の通り: 1.3系では、h2.lobInDatabase(CLOB/BLOBをデータベースファイル中に持つ)はデフォルトで有効となります。 1.3系では、ANALYZ…
個人的に、バグとしてあげたら仕様と返されたIssueがあった思い出深いバージョンです。 新しいStringのキャッシュが5秒毎に作られるようになった。これにより、OutOfMemoryExceptionの発生が不自然に遅延することはなくなった データベースをクローズした後…
1.2.145が出ているのに...。1.2.144では、h2.lobInDatabase周辺のところがちょこちょこ直っている感じです。transferとかクラスター環境だと便利かも(試してない...) Windowsのバッチファイルの改行がCRLFになっていなかった LOBストレージ(システムプロパテ…
今回は安定板ではありません。実際、ユーザ名とパスワードをハッシュしない云々の修正では、リリース直後に不具合が発覚しています。 ちょっと試しただけでは再現してはいないのですが、CHECK制約があるカラムに対してコメントを追加すると、データベースが…
アンドロイド上でH2を使用する手順が、Tutorial - Androidに追加されました。 ユーザ定義集約関数内でinformation_schema.function_aliasesにクエリを投げるとArrayIndexOutOfBoundsExceptionが発生していた点を修正 jarファイルが50kb程度小さくなりました…
いつもより若干リリースの期間が空きました。が、変更点は少なめ。自分がバグとしてあげたのが1件直ってた。 実験的な仮の暗号アルゴリズムとして"FOG"が実装された。暗号的には弱いもので、テキストエディタで直接みたら中身が読めない、という程度の意味合…
今回はちょっと多いな、という感じ。キャッシュ周りの処理や、いくつかのパラメータのデフォルト値が改善されています。あと、共通表式(Common table expressions)が実験的ですがサポートされました。既にバグが挙げられている状況なので、まだしばらくは実…
出ました。今回は、ODBCに絡んだ修正がちょっと目新しい感じでした。いくつか気になったものだけ。 Luceneを使用した全文検索が一部のファイルシステム(splitやniomapped)で動作しない不具合の修正。 h2.optimizeOrを有効にした上で、多くのorを含むSQLでUns…
今回もあまり変更点は多くありません。「1.3になったらこれがデフォルト」というのも数多く出てきているのでそろそろ1.3に移行するのかな、とか。そういえば、中国のH2 google groupがなくなってますね。撤退したからなんでしょうが、今回ようやく気がついた…
今回もあまり修正点は多くないようです。個人的には、自分が挙げたissueが3つ入っているので、まってましたと言う感じ。 常にnullを返すネストしたクエリや条件が、IndexOutOfBoundsExceptionを投げる不具合が修正。 実験的な機能として、非常に大きなトラン…
今回はあまり変更点は多くなく、不具合修正などが中心です。 インデックスがある項目絡みの不具合修正がいくつか IS NULL の場合もインデックスが使用されるようになった xxx is nullの際に、indexを使用するようになったようです(h2.optimizeIsNull=falseで…
気になった点をいくつか。 create aliasでschemaを指定できるようになっています。 クラスター周り機能追加がいくつか。 insert XXX values (...), (...)という形式がサポートされた Shell toolで -sql 'sql文' がサポートされた Windows7でサービスに登録で…
外部のデータベースのテーブルに対するリンクテーブルを作成できます。下記のSQLで、Oracleのhogedbのstaffテーブルに対して、mystaffというリンクテーブルを作成できます。 java -cp h2-1.2.134.jar;ojdbc14-10.2.0.4.jar org.h2.tools.Shell -url jdbc:h2:…
1.2.134が出ました。今回もこまごまと機能追加が多いリリースになっています。以下気になった点をいくつか。 システムプロパティにh2.analyzeAutoが追加。この行数を超える更新が発生(テーブルごと?)すると、自動でanalyzeが実行される。ただし、現在はデフ…
まぁ、別にJavaでできていると言うことを考えれば、それほどどうと言う関数でもないかもしれませんが。FILE_READはその名の通り、ファイルを読み込む関数です。第一引数はファイル名で、ローカルファイル名とURLをサポートしています。第二引数はキャラクタ…
ユーザー定義関数の返りをテーブル代わりに使ってみます。テーブル代わりに使う場合には、メソッドはResultSetを返すものである事が必要です。それ以外、実装で特に難しいところはありませんが、ユーザ定義関数をテーブルとして扱うときには、少なくとも2回…
リリースされてました。不具合修正がほとんど。機能追加は、LOBストレージメカニズムの新規追加(でもまだ実験中)くらい。
H2では組み込みの関数の他に、ユーザ定義関数/ストアドプロシージャを作る事ができます。Triggerと同様にJavaで実装します。実装の仕方は大きく2通りあります。Triggerの時にやったようなJavaで実装してコンパイルして、H2のクラスパスにそのクラスを入れて…
トレースのレベルをかえるだけの設定ですが、思いのほか面白いです。 set TRACE_LEVEL_SYSTEM_OUT 3 こんな味も素っ気もない、エラーメッセージの裏で、 sql> select * from hoge; Error: org.h2.jdbc.JdbcSQLException: テーブル "HOGE" が見つかりません T…
H2にもやはりトリガーはあるのですが、PL/SQLやPL/pgSQLのような組み込みの言語がないので、所謂一般的にイメージするトリガーではなく、org.h2.api.Triggerインターフェースを実装したJavaのクラスが呼ばれる、という実装になっています。面倒だ、というの…
Computed Columns があるから、それに索引つければいいよ!とのこと。 create table birthday(user_id int primary key, birthday date, mon int as month(birthday)); insert into birthday(user_id,birthday) values (1, formatdatetime('2006-10-16','yyy…
前回の続き。h2では、count(*)で条件なしの単一テーブルでのカウントの際には、テーブルにアクセスしないので速い、とのこと。 sql> explain select count(*) from noprimary; PLAN SELECT COUNT(*) FROM PUBLIC.NOPRIMARY /* PUBLIC.NOPRIMARY.tableScan */…
データベースのパフォーマンスチューニングで、SQLのチューニング(インデックスの設定含む)は一番効果が大きい。それでいて、SQLのチューニングはポータビリティが高い。メモリの設定、ディスクの設定、パラメータの設定はデータベースごとにまったく異なる(…
H2では、簡単なクラスタリング機能を持っている。使い方もH2らしく非常に簡単。サーバ(ノード)は2台固定で、障害発生時の復旧は手動。参照系のクエリは1番目のノードに対してのみ実行され、その以外のステートメントは両方のノードに対して実行される(なの…
H2では、組み込みの全文検索関数のほかに、luceneを使った全文検索を組み込む事ができる。ちょっと試してみた。なお、現状公式サイトに載っている手順では日本語を対象として全文検索を実行する事ができない。というのも、LuceneのAnalyzerとして、日本語に…
CSVファイルに対してgroup byをかけたい、と思う瞬間が技術者だったら必ずあるはずです。手元には、CSVファイルと、Officeが入ったWindowsマシン。Excelでどうにかできたはずだ...と思うものの、なんとなくやってみてもうまくできない。ただ、group byかけた…
unzipでファイル名が化けてしまうのは仕方がないが、Javaだったら簡単に書けるのでは、と思ったらさにあらず。標準のZipIn(Out)putStreamでは、パスワードつきのzipの読み書きに対応していない。それじゃ、Perlではどうよ、と思ったらArchive::Zipも対応して…