AnyEvent-ForkObject
view release on metacpan or search on metacpan
$dbh->do('INSERT INTO tbl (txt) VALUES (?)', undef, rand_str,
sub {
my ($s, $res) = @_;
unless ($s eq 'ok') {
diag explain \@_;
$ok = 0;
}
if (++$count == 50) {
ok $ok, '50 records were inserted';
$dbh->selectall_arrayref(
'SELECT * FROM tbl', { Slice => {} },
sub {
my ($s, $res) = @_;
ok $s eq 'ok', 'SELECT was done';
ok @$res == 50, 'Fetched all rows';
ok 'HASH' eq ref $res->[0],
'Slice works properly';
$cv->send;
}
);
}
}
);
}
});
}
);
$cv->recv;
$cv = condvar AnyEvent;
$dbh->prepare('SELECT * FROM tbl', sub {
my ($s, $sth) = @_;
ok $s eq 'ok', 'Prepare statement';
$sth->execute(sub {
my ($s, $rv) = @_;
ok $s eq 'ok', 'Execute statement';
my $ok = 1;
async_repeat 50, sub {
my ($guard, $index, $first, $last) = @_;
$sth->fetchrow_hashref(sub {
undef $guard;
my ($s, $row) = @_;
$ok = 0 unless $s eq 'ok';
$ok = 0 unless 'HASH' eq ref $row;
$ok = 0 unless $row->{id} == $index + 1;
if ($last) {
ok $ok, 'All data fetched';
undef $sth;
undef $dbh;
my $t;
$t = AE::timer 0.5, 0 => sub {
undef $t;
$cv->send;
}
}
});
};
});
});
$cv->recv;
sub rand_str()
{
my $letters = q!qwertyuiopasdfghjkl;'][zxcvbnm,./йÑÑкенгÑÑзÑ
ÑÑÑвапÑолджÑ!;
my $str = '';
$str .= substr $letters, int(rand length $letters), 1 for 0 .. 3 + rand 100;
return $str;
}
( run in 0.606 second using v1.01-cache-2.11-cpan-85f18b9d64f )