DBD::SQLite 1.36_01

遅くなりましたが、1.35のリリース以降いくつか不具合の連絡をいただいていたので、ひとまずsegfaultするものを中心に修正しました。特に64ビット環境でお使いの方は更新&テストをおねがいします。

なお、今回の版ではバンドルされているSQLite側のライブラリの都合で内部スキーマのバージョンが変更になっているため、新しく作成するデータベースファイルについては作成時に「legacy_file_format」というプラグマを有効にしておかないと、2006年以前のSQLiteでは読めなくなります。ほとんどの方にはいまさら関係ないとは思いますが、大昔のシステムを維持管理している方には影響があるかもしれませんのでご注意ください。

ちょっとしたおまけ機能として、SQLiteAPIをたたくsqlite_traceとsqlite_profileという独自メソッドも実装しておきました。使い方はこんな感じ。本気でトレース/プロファイルしたいときには物足りませんが、DBI標準のDBI_TRACEやDBI_PROFILEを経由したトレース/プロファイルだと情報が多すぎるという向きには便利かもしれません。

use strict;
use warnings;
use DBI 1.609;

my $dbh = DBI->connect('dbi:SQLite::memory:');

$dbh->sqlite_trace(sub { my $stmt = shift; print "$stmt\n" });
$dbh->sqlite_profile(sub { my ($stmt, $time) = @_; print "[$stmt] $time\n" });

$dbh->do('create table foo (id)');
$dbh->do('insert into foo values (?)', undef, 1);

なお、sqlite_traceについては、DBI標準のtraceメソッドと衝突するため、古いDBIでfuncを使って呼び出すときも $dbh->func(sub {...}, "trace");のような形ではなく、$dbh->func(sub {...}, "sqlite_trace"); のように明示的に「sqlite_」をつけてください。