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 )