DBIx-QuickORM
view release on metacpan or search on metacpan
worktrees/dbic-compat-native-features/lib/DBIx/QuickORM/RowManager.pm view on Meta::CPAN
push @lost => $field;
}
return unless @lost;
carp "vivify() returned an already-loaded row for this primary key; the supplied data for "
. join(', ', map { "'$_'" } @lost)
. " differs from the loaded row and was not applied. To change a loaded row, fetch it and call ->update(); to ensure a row exists in the database, use the connection's find_or_insert() or update_or_insert() helpers";
}
=pod
=item $row = $mgr->insert(source => $source, fetched => \%data, ...)
=item $row = $mgr->update(source => $source, fetched => \%data, ...)
=item $row = $mgr->delete(source => $source, fetched => \%data, ...)
=item $row = $mgr->select(source => $source, fetched => \%data, ...)
Apply the named storage operation to a row (creating one if needed),
updating the cache accordingly, and return the row.
=item $row = $mgr->do_insert($source, $fetched, $old_pk, $new_pk, $row)
=item $row = $mgr->do_update($source, $fetched, $old_pk, $new_pk, $row)
=item $row = $mgr->do_delete($source, $fetched, $old_pk, $new_pk, $row)
=item $row = $mgr->do_select($source, $fetched, $old_pk, $new_pk, $row)
Backend state transitions invoked by the matching public method, after
parameters have been parsed. They change the row's state and skip cache
maintenance.
=cut
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.920 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )