AnyEvent-MySQL
view release on metacpan or search on metacpan
lib/AnyEvent/MySQL.pm view on Meta::CPAN
AnyEvent::MySQL::Imp::recv_response($dbh->{_}[HDi], sub {
eval {
if( $_[0]==AnyEvent::MySQL::Imp::RES_OK ) {
$dbh->{_}[TXN_STATEi] = NO_TXN;
$cb->(1);
}
else {
if( $_[0]==AnyEvent::MySQL::Imp::RES_ERROR ) {
_report_error($dbh, 'commit', $_[1], $_[3]);
}
else {
_report_error($dbh, 'commit', 2000, "Unexpected result: $_[0]");
}
$cb->();
}
};
$next_act->();
});
}, $cb, 0]);
}
=head2 $dbh->rollback([$cb->($rv)])
=cut
sub rollback {
my $dbh = shift;
my $cb = shift || \&AnyEvent::MySQL::_empty_cb;
_push_task($dbh, [TXN_ROLLBACK, sub {
my $next_act = shift;
_rollback($dbh, $next_act, sub {
$dbh->{_}[TXN_STATEi] = NO_TXN if( $_[0] );
&$cb;
});
}, $cb, 0]);
}
sub _rollback {
my($dbh, $next_act, $cb) = @_;
AnyEvent::MySQL::Imp::send_packet($dbh->{_}[HDi], 0, AnyEvent::MySQL::Imp::COM_QUERY, 'rollback');
AnyEvent::MySQL::Imp::recv_response($dbh->{_}[HDi], sub {
eval {
if( $_[0]==AnyEvent::MySQL::Imp::RES_OK ) {
$cb->(1) if $cb;
}
else {
if( $_[0]==AnyEvent::MySQL::Imp::RES_ERROR ) {
_report_error($dbh, 'rollback', $_[1], $_[3]);
}
else {
_report_error($dbh, 'rollback', 2000, "Unexpected result: $_[0]");
}
$cb->() if $cb;
}
};
$next_act->();
});
}
=head2 $dbh->ping(sub {my $alive = shift;});
=cut
sub ping {
my $cb = ref($_[-1]) eq 'CODE' ? pop : \&AnyEvent::MySQL::_empty_cb;
my ($dbh) = @_;
_push_task($dbh, [TXN_TASK, sub {
my $next_act = shift;
AnyEvent::MySQL::Imp::send_packet($dbh->{_}[HDi], 0, AnyEvent::MySQL::Imp::COM_PING);
AnyEvent::MySQL::Imp::recv_response($dbh->{_}[HDi], sub {
eval {
if ($_[0]==AnyEvent::MySQL::Imp::RES_OK) {
$cb->(1);
}
else {
$cb->(0);
}
};
$next_act->();
});
}, $cb, 0]);
}
package AnyEvent::MySQL::st;
use strict;
use warnings;
use Scalar::Util qw(weaken);
use constant {
DBHi => 0,
IDi => 1,
PARAMi => 2,
FIELDi => 3,
STATEMENTi => 4,
};
=head2 $sth = AnyEvent::MySQL::st->new($dbh, $statement, [$cb->($sth)])
=cut
sub new {
my $cb = ref($_[-1]) eq 'CODE' ? pop : \&AnyEvent::MySQL::_empty_cb;
my($class, $dbh, $statement) = @_;
my $sth = bless [], $class;
$sth->[DBHi] = $dbh;
$sth->[STATEMENTi] = $statement;
return $sth;
}
=head2 $sth->execute(@bind_values, [\%attr,] [$cb->($fth/$rv)])
=cut
sub execute {
my $cb = ref($_[-1]) eq 'CODE' ? pop : \&AnyEvent::MySQL::_empty_cb;
my $attr = ref($_[-1]) eq 'HASH' ? pop : {};
my($sth, @bind_values) = @_;
my $dbh = $sth->[DBHi];
( run in 1.862 second using v1.01-cache-2.11-cpan-df04353d9ac )