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 ) = 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_identifiers => 1,
49 eq_or_diff($out, <<'## END OF DIFF', "Diff as expected");
50 -- Convert schema 'create1.yml' to 'create2.yml':;
54 CREATE TABLE "added" (
58 ALTER TABLE "employee" DROP CONSTRAINT "FK5302D47D93FE702E";
60 ALTER TABLE "employee" DROP COLUMN "job_title";
62 ALTER TABLE "employee" ADD CONSTRAINT "FK5302D47D93FE702E_diff" FOREIGN KEY ("employee_id")
63 REFERENCES "person" ("person_id") DEFERRABLE;
65 ALTER TABLE "old_name" RENAME TO "new_name";
67 ALTER TABLE "new_name" ADD COLUMN "new_field" integer;
69 ALTER TABLE "person" DROP CONSTRAINT "UC_age_name";
73 ALTER TABLE "person" ADD COLUMN "is_rock_star" smallint DEFAULT 1;
75 ALTER TABLE "person" ALTER COLUMN "person_id" TYPE serial;
77 ALTER TABLE "person" ALTER COLUMN "name" SET NOT NULL;
79 ALTER TABLE "person" ALTER COLUMN "age" SET DEFAULT 18;
81 ALTER TABLE "person" ALTER COLUMN "iq" TYPE bigint;
83 ALTER TABLE "person" ALTER COLUMN "nickname" SET NOT NULL;
85 ALTER TABLE "person" ALTER COLUMN "nickname" TYPE character varying(24);
87 ALTER TABLE "person" RENAME COLUMN "description" TO "physical_description";
89 ALTER TABLE "person" ADD CONSTRAINT "unique_name" UNIQUE ("name");
91 ALTER TABLE "person" ADD CONSTRAINT "UC_person_id" UNIQUE ("person_id");
93 ALTER TABLE "person" ADD CONSTRAINT "UC_age_name" UNIQUE ("age", "name");
95 DROP TABLE "deleted" CASCADE;
102 $out = SQL::Translator::Diff::schema_diff(
103 $source_schema, 'PostgreSQL', $target_schema, 'PostgreSQL',
104 { ignore_index_names => 1,
105 ignore_constraint_names => 1,
107 quote_identifiers => 0,
111 eq_or_diff($out, <<'## END OF DIFF', "Diff as expected");
112 -- Convert schema 'create1.yml' to 'create2.yml':;
120 ALTER TABLE employee DROP COLUMN job_title;
122 ALTER TABLE old_name RENAME TO new_name;
124 ALTER TABLE new_name ADD COLUMN new_field integer;
126 ALTER TABLE person DROP CONSTRAINT UC_age_name;
128 ALTER TABLE person ADD COLUMN is_rock_star smallint DEFAULT 1;
130 ALTER TABLE person ALTER COLUMN person_id TYPE serial;
132 ALTER TABLE person ALTER COLUMN name SET NOT NULL;
134 ALTER TABLE person ALTER COLUMN age SET DEFAULT 18;
136 ALTER TABLE person ALTER COLUMN iq TYPE bigint;
138 ALTER TABLE person ALTER COLUMN nickname SET NOT NULL;
140 ALTER TABLE person ALTER COLUMN nickname TYPE character varying(24);
142 ALTER TABLE person RENAME COLUMN description TO physical_description;
144 ALTER TABLE person ADD CONSTRAINT UC_person_id UNIQUE (person_id);
146 ALTER TABLE person ADD CONSTRAINT UC_age_name UNIQUE (age, name);
148 DROP TABLE deleted CASCADE;
157 $out = SQL::Translator::Diff::schema_diff(
158 $source_schema, 'PostgreSQL', $source_schema, 'PostgreSQL'
161 eq_or_diff($out, <<'## END OF DIFF', "No differences found");
162 -- Convert schema 'create1.yml' to 'create1.yml':;
164 -- No differences found;