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 )