MariaDB-NonBlocking
view release on metacpan or search on metacpan
lib/MariaDB/NonBlocking.pm view on Meta::CPAN
package MariaDB::NonBlocking;
use v5.18.2; # needed for __SUB__, implies strict
use warnings;
use Sub::StrictDecl;
use constant DEBUG => $ENV{MariaDB_NonBlocking_DEBUG} // 0;
sub TELL (@) {
say STDERR __PACKAGE__, ': ', join " ", @_;
}
use Carp (); # for confess
=head1 NAME
MariaDB::NonBlocking - Nonblocking connections to MySQL using libmariadbclient
=head1 VERSION
Version 0.31
=cut
use Exporter qw(import);
use XSLoader qw();
BEGIN {
our $VERSION = '0.31';
XSLoader::load(__PACKAGE__);
};
our @EXPORT_OK = qw/
MYSQL_WAIT_READ
MYSQL_WAIT_WRITE
MYSQL_WAIT_EXCEPT
MYSQL_WAIT_TIMEOUT
/;
our %EXPORT_TAGS = (
'all' => [ @EXPORT_OK ]
);
use constant {
OPERATION_RUN_QUERY => 0x01,
OPERATION_CONNECT => 0x02,
OPERATION_PING => 0x04,
};
# Better to import this, since it is a custom op
use Ref::Util qw(is_arrayref is_coderef);
use Scalar::Util qw(weaken);
sub new {
my $class = shift;
my $obj = $class->init;
return $obj;
}
sub ___clean_object {
my ($maria) = @_;
delete $maria->{pending};
delete $maria->{in_use};
$maria->_clean_object
}
sub _clean_object { ... } # Must be overriden
sub _set_timer { # Must be overriden
my ($maria, $timer_type, $timeout_s, $cb) = @_;
...
}
sub _disarm_timer { # Must be overriden
my ($maria, $timer_type) = @_;
...
}
sub _set_io_watcher { # Must be overriden
my ($maria, $fd, $wait_type, $cb) = @_;
...
}
sub start_work {
my ($maria, $operation, $operation_args) = @_;
$maria->{in_use} = 1;
if ( $operation == OPERATION_RUN_QUERY ) {
return $maria->run_query_start( @{ $operation_args || [] } );
}
elsif ( $operation == OPERATION_CONNECT ) {
return $maria->connect_start($operation_args);
}
elsif ( $operation == OPERATION_PING ) {
return $maria->ping_start;
}
else {
...
}
}
sub work_done {
my ($maria, $operation) = @_;
if ( $operation == OPERATION_RUN_QUERY ) {
return $maria->query_results;
}
elsif ( $operation == OPERATION_PING ) {
return $maria->ping_result;
}
elsif ( $operation == OPERATION_CONNECT ) {
return $maria;
}
else {
( run in 1.983 second using v1.01-cache-2.11-cpan-39bf76dae61 )