Handel-Storage-RDBO

 view release on metacpan or  search on metacpan

lib/Handel/Storage/RDBO/Result.pm  view on Meta::CPAN

# $Id$
package Handel::Storage::RDBO::Result;
use warnings;
use strict;

BEGIN {
    use base qw/Handel::Storage::Result/;
    use Handel::Exception;
    use Rose::DB::Object::Helpers;
};

sub delete {
    return shift->storage_result->delete(cascade => 1, @_);
};

sub discard_changes {
    return shift->storage_result->load(@_);
};

sub update {
    my ($self, $data) = @_;
    my $storage_result = $self->storage_result;
    my $coldata = Rose::DB::Object::Helpers::column_value_pairs($storage_result);

    if ($data) {
        foreach my $key (keys %{$data}) {
            $coldata->{$key} = $data->{$key};
        };
    };

    
    $self->storage->check_constraints($coldata, $storage_result);
    $self->storage->validate_data($coldata);

    foreach my $key (keys %{$coldata}) {
        $storage_result->$key($coldata->{$key});
    };

    return $self->storage_result->save;
};

sub txn_begin {
    my $self = shift;

    return $self->storage->txn_begin($self);
};

sub txn_commit {
    my $self = shift;

    return $self->storage->txn_commit($self);
};

sub txn_rollback {
    my $self = shift;

    return $self->storage->txn_rollback($self);
};

sub AUTOLOAD {
    my $self = shift;
    return if (our $AUTOLOAD) =~ /::DESTROY$/;

    $AUTOLOAD =~ s/^.*:://;

    my $result;
    eval {
        $result = $self->storage_result->$AUTOLOAD(@_);
    };
    if ($@) {
        throw Handel::Exception::Constraint(-details => $@);
    };



( run in 0.742 second using v1.01-cache-2.11-cpan-99c4e6809bf )