Awesome non-quoted numeric default patch by Stephen Clouse
[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;
28
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 => {
3406fd5b 44 quote_table_names => 0,
45 }
46 }
47);
48eq_or_diff($out, <<'## END OF DIFF', "Diff as expected");
49-- Convert schema 'create1.yml' to 'create2.yml':;
50
51BEGIN;
52
53CREATE TABLE added (
54 "id" bigint
55);
56
57ALTER TABLE old_name RENAME TO new_name;
58
59ALTER TABLE employee DROP CONSTRAINT FK5302D47D93FE702E;
60
61ALTER TABLE person DROP CONSTRAINT UC_age_name;
62
63DROP INDEX u_name;
64
65ALTER TABLE employee DROP COLUMN job_title;
66
67ALTER TABLE new_name ADD COLUMN new_field integer;
68
06baeb21 69ALTER TABLE person ADD COLUMN is_rock_star smallint DEFAULT 1;
3406fd5b 70
71ALTER TABLE person ALTER COLUMN person_id TYPE serial;
72
73ALTER TABLE person ALTER COLUMN name SET NOT NULL;
74
75ALTER TABLE person ALTER COLUMN age SET DEFAULT 18;
76
77ALTER TABLE person ALTER COLUMN iq TYPE bigint;
78
79ALTER TABLE person RENAME COLUMN description TO physical_description;
80
81ALTER TABLE person ADD CONSTRAINT "unique_name" UNIQUE (name);
82
83ALTER TABLE employee ADD FOREIGN KEY (employee_id)
84 REFERENCES person (person_id) DEFERRABLE;
85
86ALTER TABLE person ADD CONSTRAINT "UC_person_id" UNIQUE (person_id);
87
88ALTER TABLE person ADD CONSTRAINT "UC_age_name" UNIQUE (age, name);
89
90DROP TABLE deleted CASCADE;
91
92
93COMMIT;
94
95## END OF DIFF
96
97$out = SQL::Translator::Diff::schema_diff(
98 $source_schema, 'PostgreSQL', $target_schema, 'PostgreSQL',
99 { ignore_index_names => 1,
100 ignore_constraint_names => 1,
1f5b2625 101 producer_args => {
3406fd5b 102 quote_table_names => 0,
103 quote_field_names => 0,
104 }
105 });
106
107eq_or_diff($out, <<'## END OF DIFF', "Diff as expected");
108-- Convert schema 'create1.yml' to 'create2.yml':;
109
110BEGIN;
111
963fd5fc 112CREATE TABLE added (
3406fd5b 113 id bigint
114);
115
116ALTER TABLE old_name RENAME TO new_name;
117
118ALTER TABLE person DROP CONSTRAINT UC_age_name;
119
120ALTER TABLE employee DROP COLUMN job_title;
121
963fd5fc 122ALTER TABLE new_name ADD COLUMN new_field integer;
3406fd5b 123
06baeb21 124ALTER TABLE person ADD COLUMN is_rock_star smallint DEFAULT 1;
3406fd5b 125
126ALTER TABLE person ALTER COLUMN person_id TYPE serial;
127
128ALTER TABLE person ALTER COLUMN name SET NOT NULL;
129
130ALTER TABLE person ALTER COLUMN age SET DEFAULT 18;
131
132ALTER TABLE person ALTER COLUMN iq TYPE bigint;
133
134ALTER TABLE person RENAME COLUMN description TO physical_description;
135
ce150ada 136ALTER TABLE person ADD CONSTRAINT "UC_person_id" UNIQUE (person_id);
3406fd5b 137
ce150ada 138ALTER TABLE person ADD CONSTRAINT "UC_age_name" UNIQUE (age, name);
3406fd5b 139
140DROP TABLE deleted CASCADE;
141
142
143COMMIT;
144
145## END OF DIFF
146
147
148# Test for sameness
149$out = SQL::Translator::Diff::schema_diff(
150 $source_schema, 'PostgreSQL', $source_schema, 'PostgreSQL'
151);
152
153eq_or_diff($out, <<'## END OF DIFF', "No differences found");
154-- Convert schema 'create1.yml' to 'create1.yml':;
155
156-- No differences found;
157
158## END OF DIFF