SQLite-Abstract
view release on metacpan or search on metacpan
lib/SQLite/Abstract.pm view on Meta::CPAN
SELECT count(*) FROM $self->{tablename}
/
);
$self->_END_;
return $count->[0][0];
}
sub sum {
shift->count(@_);
}
sub _END_ {
my $self = shift;
$self->{q{COMMIT}}->();
$self->{dbh}->errstr
and eval { $self->{q{ROLLBACK}}->() };
}
sub do {
shift->_do_(@_);
}
sub _do_ {
my $self = shift;
my $query = "@_";
my $affected;
eval {
$affected = $self->{q{dbh}}->do($query);
$self->{q{COMMIT}}->();
};
if ( $self->{q{dbh}}->errstr ) {
$self->err = $@;
eval { $self->{q{ROLLBACK}}->() };
if ( $self->{q{dbh}}->{q{RaiseError}} ) {
croak $self->err;
}
else {
carp $self->err;
return undef;
}
}
else {
return $affected == 0
? "0E0"
: $affected;
}
}
sub _check_table {
my $self = shift;
$self->{q{tablename}}
or croak _err_msg("missing table name");
}
sub _err_msg {
__PACKAGE__ . q/:/ . (caller)[2] . q/:/ . __LINE__ . q/: / . "@_";
}
sub err : lvalue {
$_[1]
? $_[0]->{q{err}} = $_[1]
: $_[0]->{q{err}};
}
sub AUTOLOAD {
my $self = shift;
my $query = shift;
my $tmp = shift;
$tmp and $query = $tmp;
$query or $query = q{};
our $AUTOLOAD;
( my $method = $AUTOLOAD ) =~ s/.*:://s;
if ( $method =~ /^select_(\w+)/i ) {
my $fields = join ',', split /_/, $1;
if ($fields) {
$query =~ s/^\s*SELECT.+?FROM\s+\S+//;
return $fields !~ /\,/
? $self->select( "$fields $query", \$0 )
: $self->select("$fields $query");
}
}
croak _err_msg("method $method does not exist");
}
sub DESTROY {
my $self = shift;
$self->{q{dbh}} = undef;
$self = undef;
}
1
__END__
=head1 NAME
SQLite::Abstract - Object oriented wrapper for SQLite2
=head1 SYNOPSIS
use SQLite::Abstract;
my $db = SQLite::Abstract->new("database name");
my $db = SQLite::Abstract->new(
{
DB => "database name",
DSN => "dbi:SQLite2:dbname",
TABLE => "tablename",
( run in 0.773 second using v1.01-cache-2.11-cpan-99c4e6809bf )