DBIO
view release on metacpan or search on metacpan
lib/DBIO/Admin.pm view on Meta::CPAN
my $diff = $deploy->diff;
return unless $diff->has_changes;
if ($self->dry_run) {
print "Summary:\n", $diff->summary, "\n\nSQL:\n", $diff->as_sql, "\n";
return $diff;
}
my $allow = $self->force ? 1 : 0;
# A refusing diff goes straight to apply, which throws; asking first would
# offer a release that does not exist.
my $refused = @{ $diff->classify->{refused} || [] };
if (!$allow && !$refused && (my @risky = $diff->destructive_operations)) {
print "This upgrade drops or may alter stored data:\n",
(map { ' ' . $_->summary . "\n" } @risky);
return 0 unless $self->_confirm;
$allow = 1;
}
$deploy->apply($diff, allow_destructive => $allow);
return $diff;
}
# The Deploy object of the schema's driver, or undef without a native path.
sub _native_deploy {
my ($self) = @_;
my $schema = $self->schema;
# PostgreSQL-native upgrade path from DBIO-PostgreSQL
if ($schema->can('pg_deploy')) {
_require_module('DBIO::PostgreSQL::Deploy',
'Native PostgreSQL upgrade requires DBIO-PostgreSQL (install DBIO::PostgreSQL)');
return $schema->pg_deploy;
}
return undef;
}
sub deploy {
my ($self, $args) = @_;
return $self->schema->deploy($args, $self->sql_dir);
}
sub insert {
my ($self, $rs, $set) = @_;
$rs ||= $self->resultset;
$set ||= $self->set;
Carp::croak('insert requires --resultset/--class and --set') unless $rs && $set;
my $resultset = $self->schema->resultset($rs);
my $obj = $resultset->new_result($set)->insert;
print ''.ref($resultset).' ID: '.join(',', $obj->id)."\n" if !$self->quiet;
return $obj;
}
sub update {
my ($self, $rs, $set, $where) = @_;
$rs ||= $self->resultset;
$set ||= $self->set;
$where ||= $self->where || {};
Carp::croak('update requires --resultset/--class and --set') unless $rs && $set;
my $resultset = $self->schema->resultset($rs)->search($where);
if (!$self->quiet) {
my $count = eval { $resultset->count };
if (defined $count && !$@) {
print "This action will modify $count ".ref($resultset)." records.\n";
}
else {
print "This action will modify matching ".ref($resultset)." records.\n";
}
}
return 0 unless $self->force || $self->_confirm;
return $resultset->update_all($set, $self->_all_option);
}
sub delete {
my ($self, $rs, $where, $attrs) = @_;
$rs ||= $self->resultset;
$where ||= $self->where || {};
$attrs ||= $self->attrs || {};
Carp::croak('delete requires --resultset/--class') unless $rs;
my $resultset = $self->schema->resultset($rs)->search($where, $attrs);
if (!$self->quiet) {
my $count = eval { $resultset->count };
if (defined $count && !$@) {
print "This action will delete $count ".ref($resultset)." records.\n";
}
else {
print "This action will delete matching ".ref($resultset)." records.\n";
}
}
return 0 unless $self->force || $self->_confirm;
return $resultset->delete_all($self->_all_option);
}
sub select {
my ($self, $rs, $where, $attrs) = @_;
$rs ||= $self->resultset;
$where ||= $self->where || {};
$attrs ||= $self->attrs || {};
Carp::croak('select requires --resultset/--class') unless $rs;
my $resultset = $self->schema->resultset($rs)->search($where, $attrs);
my @columns = $resultset->result_source->columns;
my @data = ( [ @columns ] );
while (my $row = $resultset->next) {
( run in 0.449 second using v1.01-cache-2.11-cpan-145b269f2f3 )