DBD::SQLite 1.41_01

SQLite 3.8.0 が出たので、DBD::SQLiteにバンドルされているライブラリも更新して、1.41_01としてリリースしました。SQLite 3.8.0ではクエリプランナーが一新されているほか、where節で限定する部分インデックスも利用できるようになっています。

新しいクエリプランナーの詳細については下記をどうぞ。

http://www.sqlite.org/queryplanner-ng.html

私自身はまだ使い込んでいませんが、SQLiteの作者氏によれば、sqlite.orgで2ヶ月以上使ってみたけれども問題は出ていないとのこと。DBD::SQLiteのテストから判断する限り、今回の変更によって余分なsortがひとつ減ったりしていますので、通常は新しいクエリプランナーの方が多かれ少なかれよい結果が期待できるはずですが、前回のクエリオプティマイザ最適化のときにもあったように、既存のコードのなかにはドキュメントにない、未定義の動作を前提にして書かれているものがあるかもしれませんので、安定版をリリースするまでに、アプリが壊れたり、性能劣化が起こっていないか、確認をおねがいします。

部分インデックスについては下記をどうぞ。

http://www.sqlite.org/partialindex.html

これも、上手に使えば非常に便利そうですが、3.7.0で導入されたWALモード同様、使うとバージョン3.8.0より前のSQLiteではアクセスできなくなりますのでご注意ください。DROP INDEXで部分インデックスを消せば古い(DBD::)SQLiteでもアクセスできるようになります。

また、今回のリリースではURI形式のデータベース名も渡せるようになっています。といっても、リモートのデータベースにアクセスできるようになったわけではなく、クエリパラメータを追加することでSQLiteの挙動を変更するためのものです。

利用可能なパラメータについては下記をどうぞ。

http://www.sqlite.org/uri.html

PODにも書いておきましたが、URI形式のデータベース名を使う場合は、

  my $dbh = DBI->connect("dbi:SQLite:uri=file:$path_to_dbfile?mode=rwc");

のように、従来の「 dbname= 」ではなく、「 uri= 」を使ってURIを渡してください。今回新設したsqlite_open_flagsアトリビュートにDBD::SQLite::OPEN_URIを渡すこともできます。

なお、こちらで報告しそびれていましたが、1.40ではstatistics_infoが使えるようになっているのと、NetBSDも_XOPEN_SOURCEのハックが不要と判明したので修正してあります。