#!/usr/bin/perl use warnings; use strict; use DBI; use Benchmark 'cmpthese'; my %db=( "on disk" => "/tmp/sqlitetest", "in mem" => ":memory:", "ramdisk" => "/mnt/ramfs/sqlitetest" ); my $dbh; for my $current_db (keys %db) { print "## Testing backing store $current_db: ##\n"; $dbh = DBI->connect("dbi:SQLite:dbname=$db{$current_db}","","") or die "Couldn't create $current_db db"; $dbh->do(qq{create table test ( id integer, text varchar, nuthertext varchar)}) or die $dbh->errstr(); for my $queries (10,100,300) { print "$queries actions per connection:\n"; cmpthese (-5, { "no transact." => sub { my $sth = $dbh->prepare(q(insert into test values(?,?,?))); for my $i(1..$queries) { $sth->execute($i,'No business','like perl business'); my @row_ary = $dbh->selectrow_array('select count(*) from test'); } $sth->finish(); $dbh->do(qq{delete from test}); }, "transact." => sub { $dbh->begin_work(); my $sth = $dbh->prepare(q(insert into test values(?,?,?))); for my $i(1..$queries) { $sth->execute($i,'No business','like perl business'); my @row_ary = $dbh->selectrow_array('select count(*) from test'); } $sth->finish(); $dbh->do(qq{delete from test}); $dbh->commit(); } } ); } $dbh->disconnect(); unlink $db{$current_db}; }