8 use File::Spec::Functions qw(catfile updir tmpdir);
11 use Test::Differences;
12 use Test::SQL::Translator qw(maybe_plan);
13 use SQL::Translator::Schema::Constants;
14 use Storable 'dclone';
18 use_ok('SQL::Translator::Diff') or die "Cannot continue\n";
20 my $tr = SQL::Translator->new;
22 my ( $source_schema, $target_schema, $parsed_sql_schema ) = map {
23 my $t = SQL::Translator->new;
26 my $out = $t->translate( catfile($Bin, qw/data diff pgsql/, $_ ) )
29 my $schema = $t->schema;
30 unless ( $schema->name ) {
34 } (qw( create1.yml create2.yml ));
36 # Test for differences
37 my $out = SQL::Translator::Diff::schema_diff(
44 quote_table_names => 0,
48 eq_or_diff($out, <<'## END OF DIFF', "Diff as expected");
49 -- Convert schema 'create1.yml' to 'create2.yml':;
57 ALTER TABLE old_name RENAME TO new_name;
59 ALTER TABLE employee DROP CONSTRAINT FK5302D47D93FE702E;
61 ALTER TABLE person DROP CONSTRAINT UC_age_name;
65 ALTER TABLE employee DROP COLUMN job_title;
67 ALTER TABLE new_name ADD COLUMN new_field integer;
69 ALTER TABLE person ADD COLUMN is_rock_star smallint DEFAULT '1';
71 ALTER TABLE person ALTER COLUMN person_id TYPE serial;
73 ALTER TABLE person ALTER COLUMN name SET NOT NULL;
75 ALTER TABLE person ALTER COLUMN age SET DEFAULT 18;
77 ALTER TABLE person ALTER COLUMN iq TYPE bigint;
79 ALTER TABLE person RENAME COLUMN description TO physical_description;
81 ALTER TABLE person ADD CONSTRAINT "unique_name" UNIQUE (name);
83 ALTER TABLE employee ADD FOREIGN KEY (employee_id)
84 REFERENCES person (person_id) DEFERRABLE;
86 ALTER TABLE person ADD CONSTRAINT "UC_person_id" UNIQUE (person_id);
88 ALTER TABLE person ADD CONSTRAINT "UC_age_name" UNIQUE (age, name);
90 DROP TABLE deleted CASCADE;
97 $out = SQL::Translator::Diff::schema_diff(
98 $source_schema, 'PostgreSQL', $target_schema, 'PostgreSQL',
99 { ignore_index_names => 1,
100 ignore_constraint_names => 1,
101 producer_options => {
102 quote_table_names => 0,
103 quote_field_names => 0,
107 eq_or_diff($out, <<'## END OF DIFF', "Diff as expected");
108 -- Convert schema 'create1.yml' to 'create2.yml':;
112 CREATE TABLE added02 (
116 ALTER TABLE old_name RENAME TO new_name;
118 ALTER TABLE person DROP CONSTRAINT UC_age_name;
120 ALTER TABLE employee DROP COLUMN job_title;
122 ALTER TABLE new_name ADD COLUMN new_field02 integer;
124 ALTER TABLE person ADD COLUMN is_rock_star02 smallint DEFAULT '1';
126 ALTER TABLE person ALTER COLUMN person_id TYPE serial;
128 ALTER TABLE person ALTER COLUMN name SET NOT NULL;
130 ALTER TABLE person ALTER COLUMN age SET DEFAULT 18;
132 ALTER TABLE person ALTER COLUMN iq TYPE bigint;
134 ALTER TABLE person RENAME COLUMN description TO physical_description;
136 ALTER TABLE person ADD CONSTRAINT "UC_person_id3" UNIQUE (person_id);
138 ALTER TABLE person ADD CONSTRAINT "UC_age_name3" UNIQUE (age, name);
140 DROP TABLE deleted CASCADE;
149 $out = SQL::Translator::Diff::schema_diff(
150 $source_schema, 'PostgreSQL', $source_schema, 'PostgreSQL'
153 eq_or_diff($out, <<'## END OF DIFF', "No differences found");
154 -- Convert schema 'create1.yml' to 'create1.yml':;
156 -- No differences found;