Add IRC metadata and update repository and bugtracker URLs
[dbsrgits/SQL-Translator.git] / t / 30sqlt-new-diff-pgsql.t
CommitLineData
3406fd5b 1#!/usr/bin/perl
2# vim: set ft=perl:
3
4use strict;
5use warnings;
6use SQL::Translator;
7
8use File::Spec::Functions qw(catfile updir tmpdir);
9use FindBin qw($Bin);
10use Test::More;
11use Test::Differences;
12use Test::SQL::Translator qw(maybe_plan);
13use SQL::Translator::Schema::Constants;
14use Storable 'dclone';
15
16plan tests => 4;
17
18use_ok('SQL::Translator::Diff') or die "Cannot continue\n";
19
20my $tr = SQL::Translator->new;
21
22my ( $source_schema, $target_schema, $parsed_sql_schema ) = map {
23 my $t = SQL::Translator->new;
24 $t->parser( 'YAML' )
25 or die $tr->error;
26 my $out = $t->translate( catfile($Bin, qw/data diff pgsql/, $_ ) )
27 or die $tr->error;
aee4b66e 28
3406fd5b 29 my $schema = $t->schema;
30 unless ( $schema->name ) {
31 $schema->name( $_ );
32 }
33 ($schema);
34} (qw( create1.yml create2.yml ));
35
36# Test for differences
37my $out = SQL::Translator::Diff::schema_diff(
38 $source_schema,
39 'PostgreSQL',
40 $target_schema,
41 'PostgreSQL',
42 {
1f5b2625 43 producer_args => {
9683e26b 44 quote_identifiers => 0,
3406fd5b 45 }
46 }
47);
c50d1a0a 48
3406fd5b 49eq_or_diff($out, <<'## END OF DIFF', "Diff as expected");
50-- Convert schema 'create1.yml' to 'create2.yml':;
51
52BEGIN;
53
54CREATE TABLE added (
9683e26b 55 id bigint
3406fd5b 56);
57
681dc480 58ALTER TABLE employee DROP CONSTRAINT FK5302D47D93FE702E;
3406fd5b 59
0c610cc8 60ALTER TABLE employee DROP COLUMN job_title;
3406fd5b 61
0c610cc8 62ALTER TABLE employee ADD CONSTRAINT FK5302D47D93FE702E_diff FOREIGN KEY (employee_id)
63 REFERENCES person (person_id) DEFERRABLE;
3406fd5b 64
0c610cc8 65ALTER TABLE old_name RENAME TO new_name;
3406fd5b 66
67ALTER TABLE new_name ADD COLUMN new_field integer;
68
0c610cc8 69ALTER TABLE person DROP CONSTRAINT UC_age_name;
70
71DROP INDEX u_name;
72
06baeb21 73ALTER TABLE person ADD COLUMN is_rock_star smallint DEFAULT 1;
3406fd5b 74
75ALTER TABLE person ALTER COLUMN person_id TYPE serial;
76
77ALTER TABLE person ALTER COLUMN name SET NOT NULL;
78
79ALTER TABLE person ALTER COLUMN age SET DEFAULT 18;
80
81ALTER TABLE person ALTER COLUMN iq TYPE bigint;
82
8953d9e7 83ALTER TABLE person ALTER COLUMN nickname SET NOT NULL;
f19edf36 84
8953d9e7 85ALTER TABLE person ALTER COLUMN nickname TYPE character varying(24);
86
3406fd5b 87ALTER TABLE person RENAME COLUMN description TO physical_description;
88
5f31ed66 89ALTER TABLE person ADD CONSTRAINT unique_name UNIQUE (name);
3406fd5b 90
5f31ed66 91ALTER TABLE person ADD CONSTRAINT UC_person_id UNIQUE (person_id);
3406fd5b 92
5f31ed66 93ALTER TABLE person ADD CONSTRAINT UC_age_name UNIQUE (age, name);
3406fd5b 94
95DROP TABLE deleted CASCADE;
96
97
98COMMIT;
99
100## END OF DIFF
101
102$out = SQL::Translator::Diff::schema_diff(
103 $source_schema, 'PostgreSQL', $target_schema, 'PostgreSQL',
104 { ignore_index_names => 1,
105 ignore_constraint_names => 1,
1f5b2625 106 producer_args => {
3406fd5b 107 quote_table_names => 0,
108 quote_field_names => 0,
109 }
110 });
111
112eq_or_diff($out, <<'## END OF DIFF', "Diff as expected");
113-- Convert schema 'create1.yml' to 'create2.yml':;
114
115BEGIN;
116
963fd5fc 117CREATE TABLE added (
3406fd5b 118 id bigint
119);
120
3406fd5b 121ALTER TABLE employee DROP COLUMN job_title;
122
0c610cc8 123ALTER TABLE old_name RENAME TO new_name;
124
963fd5fc 125ALTER TABLE new_name ADD COLUMN new_field integer;
3406fd5b 126
0c610cc8 127ALTER TABLE person DROP CONSTRAINT UC_age_name;
128
06baeb21 129ALTER TABLE person ADD COLUMN is_rock_star smallint DEFAULT 1;
3406fd5b 130
131ALTER TABLE person ALTER COLUMN person_id TYPE serial;
132
133ALTER TABLE person ALTER COLUMN name SET NOT NULL;
134
135ALTER TABLE person ALTER COLUMN age SET DEFAULT 18;
136
137ALTER TABLE person ALTER COLUMN iq TYPE bigint;
138
8953d9e7 139ALTER TABLE person ALTER COLUMN nickname SET NOT NULL;
f19edf36 140
8953d9e7 141ALTER TABLE person ALTER COLUMN nickname TYPE character varying(24);
142
3406fd5b 143ALTER TABLE person RENAME COLUMN description TO physical_description;
144
5f31ed66 145ALTER TABLE person ADD CONSTRAINT UC_person_id UNIQUE (person_id);
3406fd5b 146
5f31ed66 147ALTER TABLE person ADD CONSTRAINT UC_age_name UNIQUE (age, name);
3406fd5b 148
149DROP TABLE deleted CASCADE;
150
151
152COMMIT;
153
154## END OF DIFF
155
156
157# Test for sameness
158$out = SQL::Translator::Diff::schema_diff(
159 $source_schema, 'PostgreSQL', $source_schema, 'PostgreSQL'
160);
161
162eq_or_diff($out, <<'## END OF DIFF', "No differences found");
163-- Convert schema 'create1.yml' to 'create1.yml':;
164
165-- No differences found;
166
167## END OF DIFF