Monorail
view release on metacpan or search on metacpan
lib/Monorail/Change/AlterField.pm view on Meta::CPAN
package Monorail::Change::AlterField;
$Monorail::Change::AlterField::VERSION = '0.4';
use Moose;
use SQL::Translator::Schema::Field;
use List::Compare;
with 'Monorail::Role::Change::StandardSQL';
=head1 SYNOPSIS
my $change = Monorail::Change::AlterField->new(
table => $from->table->name,
from => {
name => $from->name,
type => $from->data_type,
is_nullable => $from->is_nullable,
is_primary_key => $from->is_primary_key,
is_unique => $from->is_unique,
default_value => $from->default_value,
size => $from->size,
},
to => {
name => $to->name,
type => $to->data_type,
is_nullable => $to->is_nullable,
is_primary_key => $to->is_primary_key,
is_unique => $to->is_unique,
default_value => $to->default_value,
size => $to->size,
}
);
if ($change->has_changes) {
return $change->as_perl
}
else {
return;
}
=cut
has table => (is => 'ro', isa => 'Str', required => 1);
has from => (is => 'ro', isa => 'HashRef', required => 1);
has to => (is => 'ro', isa => 'HashRef', required => 1);
__PACKAGE__->meta->make_immutable;
sub has_changes {
my ($self) = @_;
if ($self->from->{name} ne $self->to->{name}) {
return 1;
}
if ($self->from->{is_nullable} != $self->to->{is_nullable}) {
return 1;
}
if ($self->from->{type} ne $self->to->{type}) {
return 1;
}
if ($self->from->{is_primary_key} != $self->to->{is_primary_key}) {
return 1;
}
if ($self->from->{is_unique} != $self->to->{is_unique}) {
return 1;
}
if (List::Compare->new($self->from->{size}, $self->to->{size})->get_symmetric_difference) {
return 1;
}
my $old_default = defined $self->from->{default_value} ? $self->from->{default_value} : '_MAGIC_MONORAIL_NULL_STRING';
my $new_default = defined $self->to->{default_value} ? $self->to->{default_value} : '_MAGIC_MONORAIL_NULL_STRING';
if ($old_default ne $new_default) {
return 1;
}
return;
}
sub as_sql {
my ($self) = @_;
return unless $self->has_changes;
return $self->producer->alter_field(
$self->from_as_sql_translator_field,
$self->to_as_sql_translator_field,
);
}
sub transform_schema {
my ($self, $schema) = @_;
return unless $self->has_changes;
my $table = $schema->get_table($self->table);
( run in 0.475 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )