Acrux-DBI
view release on metacpan or search on metacpan
lib/Acrux/DBI.pm view on Meta::CPAN
=head1 SEE ALSO
L<Mojo::mysql>, L<Mojo::Pg>, L<Mojo::DB::Connector>, L<CTK::DBI>, L<DBI>
=head1 AUTHOR
Serż Minus (Sergey Lepenkov) L<https://www.serzik.com> E<lt>abalama@cpan.orgE<gt>
=head1 COPYRIGHT
Copyright (C) 1998-2026 D&D Corporation
=head1 LICENSE
This program is distributed under the terms of the Artistic License Version 2.0
See the C<LICENSE> file or L<https://opensource.org/license/artistic-2-0> for details
=cut
our $VERSION = '0.04';
use Carp qw/carp croak/;
use Scalar::Util 'weaken';
use DBI qw//;
use Mojo::Util qw/monkey_patch md5_sum/;
use Mojo::URL qw//;
use Mojo::Cache;
use Acrux::Util qw//;
use Acrux::RefUtil qw/is_array_ref is_code_ref/;
use Acrux::DBI::Res;
use Acrux::DBI::Tx;
use Acrux::DBI::Dump;
use constant {
DEBUG => $ENV{ACRUX_DBI_DEBUG} || 0,
DEFAULT_DBI_URL => 'sponge://',
DEFAULT_DBI_DSN => 'DBI:Sponge:',
DEFAULT_DBI_OPTS => {
RaiseError => 0,
PrintError => 0,
PrintWarn => 0,
},
};
# Set method ping to DBD::Sponge
monkey_patch 'DBD::Sponge::db', ping => sub { 1 };
sub new {
my $class = shift;
my $url = shift || DEFAULT_DBI_URL;
croak 'Invalid DBI URL' unless $url;
my $opts = scalar(@_) ? scalar(@_) > 1 ? {@_} : {%{$_[0]}} : {};
my $uri = Mojo::URL->new($url);
# Default attributes
my %_opts = (%{(DEFAULT_DBI_OPTS)}, %$opts);
my $autoclean = delete $_opts{autoclean};
my $self = bless {
url => $url,
uri => $uri,
dsn => '',
cachekey=> '',
driver => '',
dbh => undef,
error => "", # Ok
autoclean => $autoclean ? 1 : 0,
opts => {%_opts},
cache => Mojo::Cache->new,
}, $class;
return $self;
}
# Attributes
sub url {
my $self = shift;
if (scalar(@_) >= 1) {
$self->{url} = shift;
$self->{uri}->parse($self->{url});
$self->{dsn} = '';
$self->{cachekey} = '';
$self->{driver} = '';
return $self;
}
return $self->{url};
}
sub driver { # scheme
my $self = shift;
$self->{driver} ||= $self->{uri}->protocol;
}
sub host {
my $self = shift;
return $self->{uri}->host || 'localhost';
}
sub port {
my $self = shift;
return $self->{uri}->port // '';
}
sub options {
my $self = shift;
my $opts = $self->{opts}; # defaults
my $query = $self->{uri}->query;
my %params = ();
$params{$_} = $query->param($_) for @{$query->names};
return { (%$opts, %params) } ; # merge defaults and URL params
}
sub username {
my $self = shift;
return $self->{uri}->username // '';
}
sub password {
my $self = shift;
return $self->{uri}->password // '';
}
sub userinfo {
my $self = shift;
return $self->{uri}->userinfo // '';
}
sub database {
( run in 1.033 second using v1.01-cache-2.11-cpan-e1769b4cff6 )