Alzabo
view release on metacpan or search on metacpan
lib/Alzabo/RDBMSRules.pm view on Meta::CPAN
}
unless ($pk_changed)
{
foreach my $new_pk ( $p{new}->primary_key )
{
my $old_col = eval { $p{old}->column( $new_pk->name ) };
next if $new_pk->former_name && $changed_name{ $new_pk->former_name };
unless ( $old_col && $old_col->is_primary_key )
{
push @sql, $self->alter_primary_key_sql( new => $p{new},
old => $p{old} );
last;
}
}
}
my $alter_attributes;
foreach my $new_att ( $p{new}->attributes )
{
unless ( $p{old}->has_attribute( attribute => $new_att, case_sensitive => 1 ) )
{
$alter_attributes = 1;
push @sql, $self->alter_table_attributes_sql( new => $p{new},
old => $p{old},
);
last;
}
}
unless ($alter_attributes)
{
foreach my $old_att ( $p{old}->attributes )
{
unless ( $p{new}->has_attribute( attribute => $old_att, case_sensitive => 1 ) )
{
$alter_attributes = 1;
push @sql, $self->alter_table_attributes_sql( new => $p{new},
old => $p{old},
);
last;
}
}
}
return @sql;
}
sub _virtual
{
my $self = shift;
my $sub = (caller(1))[3];
Alzabo::Exception::VirtualMethod->throw( error =>
"$sub is a virtual method and must be subclassed in " . ref $self );
}
__END__
=head1 NAME
Alzabo::RDBMSRules - Base class for Alzabo RDBMS rulesets
=head1 SYNOPSIS
use Alzabo::RDBMSRules;
my $rules = Alzabo::RDBMSRules( rules => 'MySQL' );
=head1 DESCRIPTION
This class is the base class for all C<Alzabo::RDBMSRules> modules.
To instantiate a subclass call this class's C<new()> method. See the
L<SUBCLASSING Alzabo::RDBMSRules> section for information on how to
make a ruleset for the RDBMS of your choice.
=head1 METHODS
=head2 available
A list of names representing the available C<Alzabo::RDBMSRules>
subclasses. Any one of these names would be appropriate as the
"rdbms" parameter for the L<C<< Alzabo::RDBMSRules->new()
>>|Alzabo::RDBMSRules/new> method.
=head2 new
The constructor always accepts one parameter, "rdbms", which is the
name of the RDBMS to be used.
Some subclasses may accept additional values.
The constructor returns a new C<Alzabo::RDBMSRules> object of the
appropriate subclass.
Throws: L<C<Alzabo::Exception::Eval>|Alzabo::Exceptions>
=head2 schema_sql (C<Alzabo::Create::Schema> object)
Returns a list of SQL statements which would create the given schema.
=head2 index_sql (C<Alzabo::Create::Index> object)
Returns a list of SQL statements to create the specified index.
=head2 drop_table_sql (C<Alzabo::Create::Table> object)
Returns a list of SQL statements to drop the specified table.
=head2 drop_index_sql (C<Alzabo::Create::Index> object)
Returns a list of SQL statements to drop the specified index.
( run in 1.811 second using v1.01-cache-2.11-cpan-5a3173703d6 )