Egg-Release-DBI

 view release on metacpan or  search on metacpan

lib/Egg/Mod/EasyDBI.pm  view on Meta::CPAN

	my $class= __PACKAGE__."::$dbname";
	no strict 'refs';  ## no critic
	no warnings 'redefine';
	@{"${class}::ISA"}= 'Egg::Mod::EasyDBI::table';
	*{__PACKAGE__."::$dbname"}= sub {
		my($proto)= @_;
		$proto->[1]{$dbname} ||= $class->new($proto->[0], $dbname);
	  };
	$self->$dbname;
}
sub DESTROY {}

package Egg::Mod::EasyDBI::table;
use strict;
use warnings;
use Carp qw/croak/;

my $argc= 'Egg::Mod::EasyDBI::args';

sub new {
	my($class, $es, $dbname)= @_;
	if (my $alias= $es->alias->{$dbname}) { $dbname= $alias }
	bless { es=> $es, dbname=> $dbname }, $class;
}
sub hashref {
	my $self= shift;
	my $a= $argc->_hashref(@_);
	$self->{es}->hashref
	("SELECT $a->{cols} FROM $self->{dbname} $a->{st}", $a->{ex});
}
sub arrayref {
	my $self= shift;
	my $a= $argc->_arrayref(@_);
	$self->{es}->arrayref
	("SELECT $a->{cols} FROM $self->{dbname} $a->{st}", $a->{ex}, $a->{cd});
}
*list= \&arrayref;
sub scalarref {
	my $self= shift;
	my $col = shift || croak q{ I want column. };
	   $col = $$col if ref($col) eq 'SCALAR';
	my $a= $argc->_scalarref(@_);
	$self->{es}->scalarref
	("SELECT $col FROM $self->{dbname} $a->{st}", $a->{ex});
}
sub scalar {
	my $result= shift->scalarref(@_) || return (undef);
	$$result;
}
sub insert {
	my $self= shift;
	my $a= $argc->_insert(@_);
	my $sql= qq{INSERT INTO $self->{dbname}}
	       . qq{ (}. join(', ', keys %$a). q{) VALUES}
	       . qq{ (}. join(', ', map{"?"}keys %$a). q{)};
	$self->{es}->debug($sql);
	$self->{es}->dbh->do($sql, undef, values %$a)
	> 0 ? 1: 0;
}
*in= \&insert;
sub update {
	my $self= shift;
	my $a= $argc->_update(@_);
	my $sql= qq{UPDATE $self->{dbname} SET }
	       . join(', ', keys %{$a->{up}}). qq{ WHERE $a->{st}};
	$self->{es}->debug($sql);
	$self->{es}->dbh->do($sql, undef, (values %{$a->{up}}), @{$a->{ex}})
	> 0 ? 1: 0;
}
*up= \&update;
sub update_insert {
	my $self= shift;
	return "0E0" if $self->update(@_);
	if (my $error= $self->{es}->dbh->errstr) { die $error }
	$self->insert(@_);
}
sub find_insert {
	my $self= shift;
	my $col = shift || croak q{ I want column name. };
	@_ || croak q{ I want argument. };
	my $hash= ref($_[0]) eq 'HASH'
	   ? $_[0] : CORE::do { (scalar(@_)% 2)== 0 ? {@_}: {$col, @_} };
	return "0E0" if $self->scalarref($col, "$col = ?",
	  (ref($hash->{$col}) eq 'ARRAY' ? $hash->{$col}->[0]: $hash->{$col}));
	$self->insert($hash);
}
sub for_update {
	my $self= shift;
	my $st  = shift || croak q{ I want column. };
	   $st  = $$st if ref($st) eq 'SCALAR';
	my $val = shift || croak q{ I want value. };
	my $sql = "SELECT * FROM $self->{dbname} WHERE $st = ? FOR UPDATE";
	$self->{es}->debug($sql);
	$self->{es}->dbh->do($sql, undef, $val) > 0 ? 1: 0;
}
sub delete {
	my $self= shift;
	my $st  = shift || die q{ I want argument. };
	   $st  = $$st if ref($st) eq 'SCALAR';
	my $ex  = ref($_[0]) eq 'ARRAY' ? $_[0]: [@_];
	my $sql = qq{DELETE FROM $self->{dbname} WHERE $st };
	$self->{es}->debug($sql);
	$self->{es}->dbh->do($sql, undef, @$ex) > 0 ? 1: 0;
}
sub upgrade {
	my $self= shift;
	$self->{es}->upgrade_ok
	|| croak q{ There is effectively no 'upgrade_ok'. };
	my $a= $argc->_upgrade(@_);
	my $sql= qq{UPDATE $self->{dbname} SET }. join(', ', keys %{$a->{up}});
	$self->{es}->debug($sql);
	$self->{es}->dbh->do($sql, undef, (values %{$a->{up}}))
	> 0 ? 1: 0;
}
sub clear {
	my $self= shift;
	$self->{es}->clear_ok
	|| croak q{ There is effectively no 'clear_ok'. };
	my $sql= qq{DELETE FROM $self->{dbname}};
	$self->{es}->debug($sql);
	$self->{es}->dbh->do($sql, undef) > 0 ? 1: 0;
}
sub abs_hashref {
	my $self= shift;
	$self->{es}->hashref
	  ($self->{es}->sql_abstract->select($self->{dbname}, @_));
}
sub abs_arrayref {
	my $self= shift;
	my $code= ref($_[$#{@_}]) eq 'CODE' ? pop(@_): undef;
	my($stmt, @bind)= $self->{es}->sql_abstract->select($self->{dbname}, @_);



( run in 0.768 second using v1.01-cache-2.11-cpan-d7f47b0818f )