Gantry
view release on metacpan or search on metacpan
lib/Gantry/Utils/Model.pm view on Meta::CPAN
my $dbh = $class->db_Main();
unless ( $dbh->do( $sql ) ) {
$dbh->rollback unless ( $dbh->{AutoCommit} );
croak "Database error with $sql\n$DBI::errstr $!\n";
}
return $new_object;
}
sub _next_primary_key {
my $class = shift;
my $seq = $class->get_sequence_name();
my $sql = "SELECT NEXTVAL ( '$seq' );";
my $dbh = $class->db_Main();
my $sth = $dbh->prepare( $sql );
$sth->execute();
my $retval;
$sth->bind_columns( \$retval );
unless ( $sth->fetch() ) {
croak "Error couldn't fetch next primary_key for $class\n"
. "using sequecne $seq\n";
}
return $retval;
}
sub find_or_create {
my $class = shift;
my $data = ( ref $_[0] ) ? shift : { @_ };
# see if this data is in some row
my ( $row ) = $class->search( %{ $data } );
return ( defined $row ) ? $row : $class->create( $data );
}
sub delete {
my $self = shift;
my $table = $self->get_table_name();
my $pk = $self->get_primary_col();
my $sql = "DELETE FROM $table WHERE $pk = " . $self->get_primary_key();
my $dbh = $self->db_Main();
my $sth = $dbh->prepare( $sql );
$sth->execute();
undef %$self;
bless $self, 'Deleted::Object';
return 1;
}
sub update {
my $self = shift;
# build set clause for dirty cols
my @dirty_cols = keys %{ $self->{__DIRTY__} };
my @new_values;
foreach my $dirty_col ( @dirty_cols ) {
my $value = $self->quote_attribute( $dirty_col );
push @new_values, "$dirty_col=$value";
}
my $new_values = join ',', @new_values;
# build sql string
my $primary = $self->get_primary_col();
my $sql = 'UPDATE ' . $self->get_table_name() . " SET $new_values"
. " WHERE $primary = " . $self->get_primary_key() . ';';
# execute sql
my $dbh = $self->db_Main();
unless ( $dbh->do( $sql ) ) {
$dbh->rollback unless ( $dbh->{AutoCommit} );
croak "Database error with $sql\n$DBI::errstr $!\n";
}
# reset dirty
$self->{__DIRTY__} = {};
}
#-----------------------------------------------------------------
# accessors and their helpers
#-----------------------------------------------------------------
sub get {
my $self = shift;
my @cols = @_;
my @retvals;
foreach my $col ( @cols ) {
my $method = "get_$col";
push @retvals, $self->$method();
}
return ( wantarray ) ? @retvals : $retvals[0];
}
sub set {
my $self = shift;
my %value_for = @_;
foreach my $col ( keys %value_for ) {
my $method = "set_$col";
$self->$method( $value_for{$col} );
}
}
sub quote_attribute {
my $self = shift;
( run in 2.353 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )