Release commit for 1.62
[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
55fa8147 22my ( $source_schema, $target_schema ) = map {
3406fd5b 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 => {
f7410082 44 quote_identifiers => 1,
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
f7410082 54CREATE TABLE "added" (
55 "id" bigint
3406fd5b 56);
57
f7410082 58ALTER TABLE "employee" DROP CONSTRAINT "FK5302D47D93FE702E";
3406fd5b 59
f7410082 60ALTER TABLE "employee" DROP COLUMN "job_title";
3406fd5b 61
f7410082 62ALTER TABLE "employee" ADD CONSTRAINT "FK5302D47D93FE702E_diff" FOREIGN KEY ("employee_id")
63 REFERENCES "person" ("person_id") DEFERRABLE;
3406fd5b 64
f7410082 65ALTER TABLE "old_name" RENAME TO "new_name";
3406fd5b 66
f7410082 67ALTER TABLE "new_name" ADD COLUMN "new_field" integer;
3406fd5b 68
f7410082 69ALTER TABLE "person" DROP CONSTRAINT "UC_age_name";
0c610cc8 70
f7410082 71DROP INDEX "u_name";
0c610cc8 72
f7410082 73ALTER TABLE "person" ADD COLUMN "is_rock_star" smallint DEFAULT 1;
3406fd5b 74
f7410082 75ALTER TABLE "person" ALTER COLUMN "person_id" TYPE serial;
3406fd5b 76
f7410082 77ALTER TABLE "person" ALTER COLUMN "name" SET NOT NULL;
3406fd5b 78
f7410082 79ALTER TABLE "person" ALTER COLUMN "age" SET DEFAULT 18;
3406fd5b 80
f7410082 81ALTER TABLE "person" ALTER COLUMN "iq" TYPE bigint;
3406fd5b 82
f7410082 83ALTER TABLE "person" ALTER COLUMN "nickname" SET NOT NULL;
f19edf36 84
f7410082 85ALTER TABLE "person" ALTER COLUMN "nickname" TYPE character varying(24);
8953d9e7 86
f7410082 87ALTER TABLE "person" RENAME COLUMN "description" TO "physical_description";
3406fd5b 88
f7410082 89ALTER TABLE "person" ADD CONSTRAINT "unique_name" UNIQUE ("name");
3406fd5b 90
f7410082 91ALTER TABLE "person" ADD CONSTRAINT "UC_person_id" UNIQUE ("person_id");
3406fd5b 92
f7410082 93ALTER TABLE "person" ADD CONSTRAINT "UC_age_name" UNIQUE ("age", "name");
3406fd5b 94
f7410082 95DROP TABLE "deleted" CASCADE;
3406fd5b 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 => {
f82112a3 107 quote_identifiers => 0,
3406fd5b 108 }
109 });
110
111eq_or_diff($out, <<'## END OF DIFF', "Diff as expected");
112-- Convert schema 'create1.yml' to 'create2.yml':;
113
114BEGIN;
115
963fd5fc 116CREATE TABLE added (
3406fd5b 117 id bigint
118);
119
3406fd5b 120ALTER TABLE employee DROP COLUMN job_title;
121
0c610cc8 122ALTER TABLE old_name RENAME TO new_name;
123
963fd5fc 124ALTER TABLE new_name ADD COLUMN new_field integer;
3406fd5b 125
0c610cc8 126ALTER TABLE person DROP CONSTRAINT UC_age_name;
127
06baeb21 128ALTER TABLE person ADD COLUMN is_rock_star smallint DEFAULT 1;
3406fd5b 129
130ALTER TABLE person ALTER COLUMN person_id TYPE serial;
131
132ALTER TABLE person ALTER COLUMN name SET NOT NULL;
133
134ALTER TABLE person ALTER COLUMN age SET DEFAULT 18;
135
136ALTER TABLE person ALTER COLUMN iq TYPE bigint;
137
8953d9e7 138ALTER TABLE person ALTER COLUMN nickname SET NOT NULL;
f19edf36 139
8953d9e7 140ALTER TABLE person ALTER COLUMN nickname TYPE character varying(24);
141
3406fd5b 142ALTER TABLE person RENAME COLUMN description TO physical_description;
143
5f31ed66 144ALTER TABLE person ADD CONSTRAINT UC_person_id UNIQUE (person_id);
3406fd5b 145
5f31ed66 146ALTER TABLE person ADD CONSTRAINT UC_age_name UNIQUE (age, name);
3406fd5b 147
148DROP TABLE deleted CASCADE;
149
150
151COMMIT;
152
153## END OF DIFF
154
155
156# Test for sameness
157$out = SQL::Translator::Diff::schema_diff(
158 $source_schema, 'PostgreSQL', $source_schema, 'PostgreSQL'
159);
160
161eq_or_diff($out, <<'## END OF DIFF', "No differences found");
162-- Convert schema 'create1.yml' to 'create1.yml':;
163
164-- No differences found;
165
166## END OF DIFF