DBIx-QuickORM
view release on metacpan or search on metacpan
lib/DBIx/QuickORM/RowManager.pm view on Meta::CPAN
# Remove from passed in row if we got one
$row->{+ROW_DATA}->invalidate(reason => $reason) if $row;
# Now check cache for row, might be same, might not
$row = $self->uncache($source, $row, $old_pk, $new_pk);
$row->{+ROW_DATA}->invalidate(reason => $reason) if $row;
return;
}
sub _state {
my $self = shift;
my %params = @_;
$params{+TRANSACTION} //= $self->{+TRANSACTIONS}->[-1] if @{$self->{+TRANSACTIONS}};
return \%params;
}
sub _vivify {
my $self = shift;
my ($source, $state) = @_;
my $connection = $self->{+CONNECTION};
my $row_class = load_class($source->row_class // $connection->schema->row_class // 'DBIx::QuickORM::Row') or die $@;
my $row_data = DBIx::QuickORM::Connection::RowData->new(stack => [$state], connection => $connection, source => $source);
return $row_class->new(ROW_DATA() => $row_data);
}
sub vivify {
my $self = shift;
my ($source, $fetched, $old_pk, $new_pk, $row) = $self->parse_params({@_}, fetched => 1);
$row //= $self->_vivify($source, $self->_state(pending => $fetched));
return $row;
}
sub insert {
my $self = shift;
my ($source, $fetched, $old_pk, $new_pk, $row) = $self->parse_params({@_});
$row = $self->do_insert($source, $fetched, $old_pk, $new_pk, $row);
$self->cache($source, $row, $old_pk, $new_pk);
return $row;
}
sub do_insert {
my $self = shift;
my ($source, $fetched, $old_pk, $new_pk, $row) = @_;
my $state = $self->_state(stored => $fetched, pending => undef);
$row->{+ROW_DATA}->change_state($state) if $row;
$row //= $self->_vivify($source, $state);
return $row;
}
sub update {
my $self = shift;
my ($source, $fetched, $old_pk, $new_pk, $row) = $self->parse_params({@_});
$row = $self->do_update($source, $fetched, $old_pk, $new_pk, $row);
$self->cache($source, $row, $old_pk, $new_pk);
return $row;
}
sub do_update {
my $self = shift;
my ($source, $fetched, $old_pk, $new_pk, $row) = @_;
my $state = $self->_state(stored => $fetched, pending => undef, desync => undef);
if ($row) {
$row->{+ROW_DATA}->change_state($state);
}
else {
$row = $self->_vivify($source, $state)
}
return $row;
}
sub delete {
my $self = shift;
my ($source, $fetched, $old_pk, $new_pk, $row) = $self->parse_params({@_}, fetched => 1);
return unless $row;
$row = $self->do_delete($source, $fetched, $old_pk, $new_pk, $row);
$self->uncache($source, $row, $old_pk, $new_pk);
return $row;
}
sub do_delete {
my $self = shift;
my ($source, $fetched, $old_pk, $new_pk, $row) = @_;
$row->{+ROW_DATA}->change_state($self->_state(stored => undef));
return $row;
}
sub select {
my $self = shift;
my ($source, $fetched, $old_pk, $new_pk, $row) = $self->parse_params({@_});
$row = $self->do_select($source, $fetched, $old_pk, $new_pk, $row);
$self->cache($source, $row, $old_pk, $new_pk);
return $row;
}
sub do_select {
my $self = shift;
my ($source, $fetched, $old_pk, $new_pk, $row) = @_;
my $state = $self->_state(stored => $fetched);
( run in 1.190 second using v1.01-cache-2.11-cpan-39bf76dae61 )