use Parallel::Benchmark;
use Test::mysqld;

my $mysqld = Test::mysqld->new(
  my_cnf => {
		'skip-networking' => '',
	},
);

{
	my $dbh = dbh();
	$dbh->do(q{
		CREATE TABLE t1 (
			k INTEGER UNSIGNED NOT NULL,
			v INTEGER UNSIGNED NOT NULL,
			PRIMARY KEY (k)
		);
	});
	$dbh->do(q{INSERT INTO t1 (k, v) VALUES (1, 0) });
}

my $bm = Parallel::Benchmark->new(
	setup => sub {
		my $self = shift;
		$self->stash->{dbh} = dbh();
	},
	teardown => sub {
		my $self = shift;
		delete $self->stash->{dbh};
	},
	benchmark => sub {
		my $self = shift;
		my $dbh = $self->stash->{dbh};
		$dbh->do(q{UPDATE t1 SET v = v + 1 WHERE k = 1});
		select undef, undef, undef, 0.1;
		1;
	},
	concurrency => 10,
#	debug => 1,
);

my $result = $bm->run();

use Data::Dumper; warn Dumper $result;

use Data::Dumper; warn Dumper dbh()->selectrow_hashref(q{SELECT * FROM t1 WHERE k = 1});

sub dbh {
	return DBI->connect($mysqld->dsn(dbname => 'test'), 'root', '', {
		AutoCommit           => 1,
		PrintError           => 0,
		RaiseError           => 1,
		ShowErrorStatement   => 1,
		AutoInactiveDestroy  => 1,
	#	mysql_enable_utf8    => 1,
	#	mysql_auto_reconnect => 0,
	});
}

=comment
$ perl /tmp/atomic.pl 
2012-12-30T16:44:23 [INFO] starting benchmark: concurrency: 10, time: 3
2012-12-30T16:44:28 [INFO] done benchmark: score 310, elapsed 3.022 sec = 102.593 / sec
$VAR1 = {
          'stashes' => {
                         '6' => {},
                         '3' => {},
                         '7' => {},
                         '9' => {},
                         '2' => {},
                         '8' => {},
                         '1' => {},
                         '4' => {},
                         '10' => {},
                         '5' => {}
                       },
          'score' => 310,
          'elapsed' => '3.0216583'
        };
$VAR1 = {
          'k' => '1',
          'v' => '310'
        };
=cut