diff options
author | Frédéric Buclin <LpSolit@gmail.com> | 2011-12-26 11:34:25 +0100 |
---|---|---|
committer | Frédéric Buclin <LpSolit@gmail.com> | 2011-12-26 11:34:25 +0100 |
commit | 3c0d1a4c8be3893f358ab932b0c8bb5d5bce8973 (patch) | |
tree | 4bc14af73fa132dddd88517118b3d5c66f9c211e /Bugzilla/DB/Schema/Pg.pm | |
parent | 17a51b0772e8c6ccd43e46cb78a84122c6364d5f (diff) | |
download | bugzilla-3c0d1a4c8be3893f358ab932b0c8bb5d5bce8973.tar.gz bugzilla-3c0d1a4c8be3893f358ab932b0c8bb5d5bce8973.tar.xz |
Bug 683644: Foreign keys aren't renamed correctly when DB tables are renamed
r=wicked a=LpSolit
Diffstat (limited to 'Bugzilla/DB/Schema/Pg.pm')
-rw-r--r-- | Bugzilla/DB/Schema/Pg.pm | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/Bugzilla/DB/Schema/Pg.pm b/Bugzilla/DB/Schema/Pg.pm index 517837dcc..ef6e5671d 100644 --- a/Bugzilla/DB/Schema/Pg.pm +++ b/Bugzilla/DB/Schema/Pg.pm @@ -114,7 +114,30 @@ sub get_rename_table_sql { # is case-insensitive and will return an error about a duplicate name return (); } - return ("ALTER TABLE $old_name RENAME TO $new_name"); + + my @sql = ("ALTER TABLE $old_name RENAME TO $new_name"); + + # If there's a SERIAL column on this table, we also need to rename the + # sequence. + # If there is a PRIMARY KEY, we need to rename it too. + my @columns = $self->get_table_columns($old_name); + foreach my $column (@columns) { + my $def = $self->get_column_abstract($old_name, $column); + if ($def->{TYPE} =~ /SERIAL/i) { + my $old_seq = "${old_name}_${column}_seq"; + my $new_seq = "${new_name}_${column}_seq"; + push(@sql, "ALTER SEQUENCE $old_seq RENAME TO $new_seq"); + push(@sql, "ALTER TABLE $new_name ALTER COLUMN $column + SET DEFAULT NEXTVAL('$new_seq')"); + } + if ($def->{PRIMARYKEY}) { + my $old_pk = "${old_name}_pkey"; + my $new_pk = "${new_name}_pkey"; + push(@sql, "ALTER INDEX $old_pk RENAME to $new_pk"); + } + } + + return @sql; } sub get_set_serial_sql { |