Skip to content

Instantly share code, notes, and snippets.

@sharifulin
Created April 12, 2011 09:55
Show Gist options
  • Save sharifulin/915268 to your computer and use it in GitHub Desktop.
Save sharifulin/915268 to your computer and use it in GitHub Desktop.
DBI::Util
package DBI::Util;
use base 'DBI';
use Carp 'croak';
our $VERSION = '0.5';
sub _parse_cfg {
my $cfg = shift || croak 'Bad config';
my $attr = {%{shift || {}}, 'PrintError' => 0, 'RaiseError' => 1};
return join(':',
'dbi',
join('',
$cfg->{'drivername'},
'(',
join(',', map { "$_=>$attr->{$_}" } keys %$attr),
')',
),
join(';',
map { "$_=$cfg->{'datasource'}->{$_}" } keys %{$cfg->{'datasource'}||{}}
)
), @$cfg{'user', 'password'};
}
sub connect {
shift->SUPER::connect(
( shift ) x 3,
{%{shift || {}}, 'PrintError' => 0, 'RaiseError' => 1}
)
}
package DBI::Util::db ;
use base 'DBI::db';
use Carp 'croak';
sub connected {
shift->SUPER::connected(
( shift ) x 3,
{%{shift || {}}, 'PrintError' => 0, 'RaiseError' => 1}
)
}
sub select { eval { shift->SUPER::selectall_arrayref(shift, {'Slice' => {}}, @_) } || croak 'Bad select: ', DBI::Util->errstr }
sub query { 0+(eval { shift->SUPER::do (shift, undef, @_) } || croak 'Bad query : ', DBI::Util->errstr) }
sub in {
my $self = shift;
' in ('.(join ',', map { $self->SUPER::quote($_) } @_ or 'NULL').') ';
}
sub limit {
my $self = shift;
my($start, $end) = map { int > 0 ? int : 0 } @_;
" limit $start, $end";
}
sub values {
my $self = shift;
' values '.join ',', map { '('.(join ',', map { $self->SUPER::quote($_) } @$_).')' } grep { ref $_ eq 'ARRAY' } @_;
}
sub like {
my $self = shift;
for (my $str = $self->SUPER::quote(shift)) {
s/^'/'%/;
s/'$/%'/;
return ' like '.$_;
}
}
package DBI::Util::st;
use base 'DBI::st';
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment