test to demonstrate Pg diff failure with rename_table+rename_field
[dbsrgits/SQL-Translator.git] / t / postgresql-rename-table-and-field.t
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::SQL::Translator;
8 use SQL::Translator;
9 use SQL::Translator::Diff;
10
11 maybe_plan(10, 'DBD::Pg', 'Test::PostgreSQL');
12
13 my ( $pgsql, $dbh , $ddl, $ret );
14
15 no warnings "once";
16 $pgsql = Test::PostgreSQL->new() or plan skip_all => $Test::PostgreSQL::errstr;
17 $dbh = DBI->connect($pgsql->dsn,'','', { RaiseError => 1 }) or plan skip_all => $DBI::errstr;
18 use warnings "once";
19
20 my $source_ddl = <<DDL;
21 CREATE TABLE foo (
22     pk  SERIAL PRIMARY KEY,
23     bar VARCHAR(10)
24 );
25 DDL
26
27 ok( $ret = $dbh->do($source_ddl), "create table" );
28
29 ok( $ret = $dbh->do(q| INSERT INTO foo (bar) VALUES ('buzz') |), "insert data" );
30
31 cmp_ok( $ret, '==', 1, "one row inserted" );
32
33 my $target_ddl = <<DDL;
34 CREATE TABLE fluff (
35     pk   SERIAL PRIMARY KEY,
36     biff VARCHAR(10)
37 );
38 DDL
39
40 my $source_sqlt = SQL::Translator->new(
41     no_comments => 1,
42     parser   => 'SQL::Translator::Parser::PostgreSQL',
43 )->translate(\$source_ddl);
44
45 my $target_sqlt = SQL::Translator->new(
46     no_comments => 1,
47     parser   => 'SQL::Translator::Parser::PostgreSQL',
48 )->translate(\$target_ddl);
49
50 my $table = $target_sqlt->get_table('fluff');
51 $table->extra( renamed_from => 'foo' );
52 my $field = $table->get_field('biff');
53 $field->extra( renamed_from => 'bar' );
54
55 my @diff = SQL::Translator::Diff->new({
56     output_db => 'PostgreSQL',
57     source_schema => $source_sqlt,
58     target_schema => $target_sqlt,
59 })->compute_differences->produce_diff_sql;
60
61 foreach my $line (@diff) {
62     $line =~ s/\n//g;
63     next if $line =~ /^--/;
64     ok( $dbh->do($line), "$line" );
65 }
66
67 ok ( $ret = $dbh->selectall_arrayref(q(SELECT biff FROM fluff), { Slice => {} }), "query DB for data" );
68
69 cmp_ok( scalar(@$ret), '==', 1, "Got 1 row");
70
71 cmp_ok( $ret->[0]->{biff}, 'eq', 'buzz', "col biff has value buzz" );