DBIx-Class
view release on metacpan or search on metacpan
lib/DBIx/Class/Storage.pm view on Meta::CPAN
package DBIx::Class::Storage;
use strict;
use warnings;
use base qw/DBIx::Class/;
use mro 'c3';
{
package # Hide from PAUSE
DBIx::Class::Storage::NESTED_ROLLBACK_EXCEPTION;
use base 'DBIx::Class::Exception';
}
use DBIx::Class::Carp;
use DBIx::Class::Storage::BlockRunner;
use Scalar::Util qw/blessed weaken/;
use DBIx::Class::Storage::TxnScopeGuard;
use Try::Tiny;
use namespace::clean;
__PACKAGE__->mk_group_accessors(simple => qw/debug schema transaction_depth auto_savepoint savepoints/);
__PACKAGE__->mk_group_accessors(component_class => 'cursor_class');
__PACKAGE__->cursor_class('DBIx::Class::Cursor');
sub cursor { shift->cursor_class(@_); }
=head1 NAME
DBIx::Class::Storage - Generic Storage Handler
=head1 DESCRIPTION
A base implementation of common Storage methods. For specific
information about L<DBI>-based storage, see L<DBIx::Class::Storage::DBI>.
=head1 METHODS
=head2 new
Arguments: $schema
Instantiates the Storage object.
=cut
sub new {
my ($self, $schema) = @_;
$self = ref $self if ref $self;
my $new = bless( {
transaction_depth => 0,
savepoints => [],
}, $self);
$new->set_schema($schema);
$new->debug(1)
if $ENV{DBIX_CLASS_STORAGE_DBI_DEBUG} || $ENV{DBIC_TRACE};
$new;
}
=head2 set_schema
Used to reset the schema class or object which owns this
storage object, such as during L<DBIx::Class::Schema/clone>.
=cut
sub set_schema {
my ($self, $schema) = @_;
$self->schema($schema);
weaken $self->{schema} if ref $self->{schema};
}
=head2 connected
Returns true if we have an open storage connection, false
if it is not (yet) open.
=cut
sub connected { die "Virtual method!" }
=head2 disconnect
Closes any open storage connection unconditionally.
=cut
sub disconnect { die "Virtual method!" }
=head2 ensure_connected
Initiate a connection to the storage if one isn't already open.
=cut
sub ensure_connected { die "Virtual method!" }
=head2 throw_exception
Throws an exception - croaks.
=cut
sub throw_exception {
my $self = shift;
if (ref $self and $self->schema) {
$self->schema->throw_exception(@_);
}
else {
DBIx::Class::Exception->throw(@_);
}
}
=head2 txn_do
=over 4
=item Arguments: C<$coderef>, @coderef_args?
=item Return Value: The return value of $coderef
=back
Executes C<$coderef> with (optional) arguments C<@coderef_args> atomically,
returning its result (if any). If an exception is caught, a rollback is issued
and the exception is rethrown. If the rollback fails, (i.e. throws an
exception) an exception is thrown that includes a "Rollback failed" message.
For example,
( run in 0.717 second using v1.01-cache-2.11-cpan-39bf76dae61 )