Apache-JAF
view release on metacpan or search on metacpan
lib/JAF/DBI.pm view on Meta::CPAN
package JAF::DBI;
use strict;
use DBI ();
use Data::Dumper 'Dumper';
sub new {
my ($class, $self) = @_;
return undef unless $self->{parent};
bless $self, $class;
$self->_init();
return $self;
}
sub _init {
my $self = shift;
$self->{insert_message} = "Record's inserted";
$self->{update_message} = "Record's updated";
$self->{delete_message} = "Record's deleted";
}
sub error { shift()->{parent}->error(@_) }
sub message { shift()->{parent}->message(@_) }
sub fixup { { Columns => {} } }
sub _insert_sql {
my ($self, $options) = @_;
my $cols = $options->{cols} || $self->{cols};
return "insert into $self->{table} (".(join ',', @{$cols}).") values (".(join ',', map {'?'} @{$cols}).")";
}
sub insert {
my ($self, $params, $options) = @_;
my @cols = $options && $options->{cols} ? @{$options->{cols}} : @{$self->{cols}};
@cols = grep {exists $params->{$_}} @cols;
my $sql = $options->{sql} || $self->_insert_sql({%$options, cols => \@cols});
if ($options->{debug}) {
warn Dumper { sql => $sql, params => $params, options => $options };
}
my $return = $self->{dbh}->do($sql, undef, map {$params->{$_}} @cols);
$return ? $self->message(defined $options->{message} ? $options->{message} : $self->{insert_message}) : $self->error($self->{dbh}->errstr());
return $return;
}
sub _update_sql {
my ($self, $options) = @_;
my $cols = $options->{cols} || $self->{cols};
my $criteria = $options->{criteria} || $self->{key};
return "update $self->{table} set ".(join ',', map {"$_ = ?"} @$cols)." where ".(ref $criteria eq 'ARRAY' ? join ' and ', map {"$_ = ?"} @$criteria : "$criteria = ?");
}
sub update {
my ($self, $params, $options) = @_;
$options->{criteria} ||= $self->{key};
( run in 2.572 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )