DBIx-ObjectMapper
view release on metacpan or search on metacpan
lib/DBIx/ObjectMapper/Mapper/Instance.pm view on Meta::CPAN
package DBIx::ObjectMapper::Mapper::Instance;
use strict;
use warnings;
use Carp::Clan qw/^DBIx::ObjectMapper/;
use Try::Tiny;
use Scalar::Util qw(refaddr weaken);
use Log::Any qw($log);
use DBIx::ObjectMapper::Utils;
use DBIx::ObjectMapper::Session::Array;
our $call = 0;
my %INSTANCES;
my %STATUS = (
# "status" => "changable status"
transient => [ 'pending', 'persistent', 'detached' ],
pending => [ 'expired', 'detached' ],
persistent => [ 'expired', 'detached' ],
detached => [],
expired => [ 'persistent', 'detached' ],
);
sub new {
my ( $class, $instance ) = @_;
return $class->get(refaddr($instance)) || $class->create($instance);
}
sub create {
my ( $class, $instance ) = @_;
my $self = bless {
instance => $instance,
status => 'transient',
is_modified => 0,
modified_data => +{},
unit_of_work => undef,
identity_condition => undef,
relation_condition => +{},
primary_cache_key => undef,
unique_cache_keys => [],
save_many_to_many => [],
remove_many_to_many => [],
}, $class;
$INSTANCES{refaddr($instance)} = $self;
$self->initialize;
return $self;
}
sub initialize {
my $self = shift;
$self->init_identity_condition;
$self->init_relation_identity_condition;
$self->init_cache_keys;
$self->{add_lazy_column} = [];
}
sub lazy_column {
my ( $self, $name ) = @_;
my $class_mapper = $self->instance->__class_mapper__;
my %lazy_column = $class_mapper->attributes->lazy_column($name);
for my $lc ( @{$self->{add_lazy_column}} ) {
if( $name eq $lc->name ) {
$lazy_column{$name} = $lc;
}
}
return %lazy_column;
}
( run in 4.153 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )