DBIx-QuickORM
view release on metacpan or search on metacpan
lib/DBIx/QuickORM/Connection.pm view on Meta::CPAN
package DBIx::QuickORM::Connection;
use strict;
use warnings;
our $VERSION = '0.000023';
use Carp qw/confess croak carp/;
use Scalar::Util qw/blessed weaken/;
use DBIx::QuickORM::Util qw/load_class/;
use DBIx::QuickORM::Handle;
use DBIx::QuickORM::Connection::Transaction;
use Object::HashBase qw{
<orm
<dbh
<dialect
<pid
lib/DBIx/QuickORM/Connection.pm view on Meta::CPAN
my $txns = $self->{+TRANSACTIONS} = [];
my $manager = $self->{+MANAGER} // 'DBIx::QuickORM::RowManager::Cached';
if (blessed($manager)) {
croak "Manager '$manager' does not subclass 'DBIx::QuickORM::RowManager'"
unless $manager->DOES('DBIx::QuickORM::RowManager');
$manager->set_connection($self);
# The HashBase setter stores a strong reference, which would create a
# connection <-> manager cycle; the manager holds its connection weakly.
weaken($manager->{DBIx::QuickORM::RowManager::CONNECTION()});
$manager->set_transactions($txns);
}
else {
my $class = load_class($manager) or die $@;
$self->{+MANAGER} = $class->new(transactions => $txns, connection => $self);
}
if (my $autofill = $orm->autofill) {
my $schema = $self->{+DIALECT}->build_schema_from_db(autofill => $autofill);
lib/DBIx/QuickORM/Connection.pm view on Meta::CPAN
=cut
sub set_async {
my $self = shift;
my ($async) = @_;
croak "There is already an async query in progress" if $self->{+IN_ASYNC} && !$self->{+IN_ASYNC}->done;
$self->{+IN_ASYNC} = $async;
weaken($self->{+IN_ASYNC});
return $async;
}
sub add_aside {
my $self = shift;
my ($aside) = @_;
$self->{+ASIDES}->{$aside} = $aside;
weaken($self->{+ASIDES}->{$aside});
return $aside;
}
sub add_fork {
my $self = shift;
my ($fork) = @_;
$self->{+FORKS}->{$fork} = $fork;
weaken($self->{+FORKS}->{$fork});
return $fork;
}
sub clear_async {
my $self = shift;
my ($async) = @_;
croak "Not currently running an async query" unless $self->{+IN_ASYNC};
lib/DBIx/QuickORM/Connection.pm view on Meta::CPAN
savepoint => $sp,
trace => \@caller,
on_fail => $params{on_fail},
on_success => $params{on_success},
on_completion => $params{on_completion},
);
$self->_txn_attach_relative_callbacks($txn, \%params);
push @{$txns} => $txn;
weaken($txns->[-1]);
my $finalize = $self->_txn_finalizer($sp);
unless($cb) {
$txn->set_no_last(1);
$txn->set_finalize($finalize);
return $txn;
}
local $@;
lib/DBIx/QuickORM/RowManager.pm view on Meta::CPAN
package DBIx::QuickORM::RowManager;
use strict;
use warnings;
our $VERSION = '0.000023';
use Carp qw/carp confess croak/;
use Scalar::Util qw/weaken/;
use DBIx::QuickORM::Util qw/load_class/;
use DBIx::QuickORM::Affinity();
use DBIx::QuickORM::Connection::RowData qw{
STORED
PENDING
DESYNC
TRANSACTION
ROW_DATA
lib/DBIx/QuickORM/RowManager.pm view on Meta::CPAN
=back
=cut
sub init {
my $self = shift;
my $con = $self->{+CONNECTION} or croak "Connection was not provided";
$self->{+TRANSACTIONS} //= $con->transactions;
weaken($self->{+CONNECTION});
}
=pod
=head1 PUBLIC METHODS
=over 4
=item $bool = $mgr->does_cache
lib/DBIx/QuickORM/RowManager/Cached.pm view on Meta::CPAN
package DBIx::QuickORM::RowManager::Cached;
use strict;
use warnings;
our $VERSION = '0.000023';
use Carp qw/croak/;
use Scalar::Util qw/weaken/;
use DBIx::QuickORM::Affinity();
use parent 'DBIx::QuickORM::RowManager';
use Object::HashBase qw {
+cache
};
=pod
lib/DBIx/QuickORM/RowManager/Cached.pm view on Meta::CPAN
my $old_key = $self->cache_key($old_pk);
delete $scache->{$old_key} if defined $old_key;
}
$new_pk //= [$row->primary_key_value_list];
my $new_key = $self->cache_key($new_pk) // return $row;
$self->_purge_dead($scache) if exists $scache->{$new_key} && !defined $scache->{$new_key};
$scache->{$new_key} = $row;
weaken($scache->{$new_key});
return $row;
}
=pod
=item $row = $mgr->uncache($source, $row, $old_pk, $new_pk)
Remove and return the cached row for the given source and primary key. The
primary key is taken from the supplied keys, or from the row itself when
none are given.
( run in 2.354 seconds using v1.01-cache-2.11-cpan-63c85eba8c4 )