Alzabo
view release on metacpan or search on metacpan
lib/Alzabo/RDBMSRules/PostgreSQL.pm view on Meta::CPAN
my $sql = "SELECT ";
$sql .= join ', ', map { '"' . $_->name . '"' } $old_table->columns;
$sql .= qq|\n INTO TEMPORARY "$temp_name" FROM "| . $old_table->name . '"';
return $sql;
}
sub _restore_table_data_sql
{
my $self = shift;
my $new_table = shift;
my $old_table = shift;
my @cols;
foreach my $column ( $new_table->columns )
{
my $old_name =
defined $column->former_name ? $column->former_name : $column->name;
push @cols, [ $column->name, $old_name ]
if $old_table->has_column($old_name);
}
my $temp_name = "TEMP" . $new_table->name;
my $sql = 'INSERT INTO "' . $new_table->name . '" (';
$sql .= join ', ', map { qq|"$_->[0]"| } @cols;
$sql .= " ) \n SELECT ";
$sql .= join ', ', map { qq|"$_->[1]"| } @cols;
$sql .= qq| FROM "$temp_name"|;
return $sql;
}
sub _drop_temp_table
{
my $self = shift;
my $table = shift;
my $temp_name = "TEMP" . $table->name;
return qq|DROP TABLE "$temp_name"|;
}
sub _restore_foreign_key_sql
{
my $self = shift;
my $table = shift;
my @sql;
foreach my $fk ( $table->all_foreign_keys )
{
push @sql, $self->foreign_key_sql($fk);
push @sql, $self->foreign_key_sql( $fk->reverse );
}
return @sql;
}
sub rename_sequences
{
my $self = shift;
my %p = @_;
return () if $self->{state}{rename_sequence_sql}{ $p{new}->name };
my @sql;
for my $old_col ( grep { $_->sequenced } $p{old}->columns )
{
my $new_col = $p{new}->column( $old_col->name )
or next;
my $old_seq = $self->_sequence_name($old_col);
my $new_seq = $self->_sequence_name($new_col);
push @sql,
qq|ALTER TABLE "$old_seq" RENAME TO "$new_seq";\n|;
}
$self->{state}{rename_sequence_sql}{ $p{new}->name } = 1;
return @sql;
}
sub drop_foreign_key_sql
{
my $self = shift;
my $fk = shift;
if ( grep { $_->is_primary_key } $fk->columns_from )
{
return unless $fk->from_is_dependent;
}
return () if $self->{state}{drop_fk_sql}{ $fk->id };
$self->{state}{drop_fk_sql}{ $fk->id } = 1;
return 'ALTER TABLE "' . $fk->table_from->name . '" DROP CONSTRAINT '
. $self->_fk_name($fk);
}
sub drop_index_sql
{
my $self = shift;
my $index = shift;
return 'DROP INDEX "' . $index->id . '"';
}
sub column_sql_add
{
my $self = shift;
my $col = shift;
return () if $self->{state}{table_sql}{ $col->table->name };
# Skip default and not null while adding column
my @sql = 'ALTER TABLE "' . $col->table->name . '" ADD COLUMN ' . $self->column_sql($col, { skip_default => 1, skip_nullable => 1 });
my $def = $self->_default_for_column($col);
if ($def)
{
push @sql,
( 'ALTER TABLE "' . $col->table->name . '" ALTER COLUMN "' .
$col->name . qq|" SET DEFAULT $def| );
}
if ( ! $col->nullable )
{
push @sql,
( 'UPDATE "' . $col->table->name
. '" SET "' . $col->name . qq|" = $def WHERE "|
. $col->name . '" IS NULL'
);
push @sql,
( 'ALTER TABLE "' . $col->table->name
. '" ADD CONSTRAINT "'
. $col->table->name . '_' . $col->name . '_not_null" CHECK ( "'
( run in 3.121 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )