Add trigger support to PostgreSQL producer and parser (including trigger scope)
[dbsrgits/SQL-Translator.git] / t / 46xml-to-pg.t
1 #!/usr/bin/perl
2 use strict;
3
4 use FindBin qw/$Bin/;
5 use Test::More;
6 use Test::SQL::Translator;
7 use Test::Exception;
8 use Test::Differences;
9 use Data::Dumper;
10 use SQL::Translator;
11 use SQL::Translator::Schema::Constants;
12
13
14 BEGIN {
15     maybe_plan(1, 'SQL::Translator::Parser::XML::SQLFairy',
16               'SQL::Translator::Producer::PostgreSQL');
17 }
18
19 my $xmlfile = "$Bin/data/xml/schema.xml";
20
21 my $sqlt;
22 $sqlt = SQL::Translator->new(
23     no_comments => 1,
24     show_warnings  => 0,
25     add_drop_table => 1,
26 );
27
28 die "Can't find test schema $xmlfile" unless -e $xmlfile;
29
30 my $sql = $sqlt->translate(
31     from     => 'XML-SQLFairy',
32     to       => 'PostgreSQL',
33     filename => $xmlfile,
34 ) or die $sqlt->error;
35
36 eq_or_diff($sql, << "SQL");
37 DROP TABLE "Basic" CASCADE;
38 CREATE TABLE "Basic" (
39   "id" serial NOT NULL,
40   "title" character varying(100) DEFAULT 'hello' NOT NULL,
41   "description" text DEFAULT '',
42   "email" character varying(500),
43   "explicitnulldef" character varying,
44   "explicitemptystring" character varying DEFAULT '',
45   -- Hello emptytagdef
46   "emptytagdef" character varying DEFAULT '',
47   "another_id" integer DEFAULT 2,
48   "timest" timestamp,
49   PRIMARY KEY ("id"),
50   CONSTRAINT "emailuniqueindex" UNIQUE ("email"),
51   CONSTRAINT "very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms" UNIQUE ("title")
52 );
53 CREATE INDEX "titleindex" on "Basic" ("title");
54
55 DROP TABLE "Another" CASCADE;
56 CREATE TABLE "Another" (
57   "id" serial NOT NULL,
58   "num" numeric(10,2),
59   PRIMARY KEY ("id")
60 );
61
62 DROP VIEW "email_list";
63 CREATE VIEW "email_list" ( "email" ) AS
64     SELECT email FROM Basic WHERE (email IS NOT NULL)
65 ;
66
67 DROP TRIGGER IF EXISTS foo_trigger;
68
69 CREATE TRIGGER foo_trigger after insert ON Basic update modified=timestamp();;
70
71 DROP TRIGGER IF EXISTS bar_trigger;
72
73 CREATE TRIGGER bar_trigger before insert OR update ON Basic update modified2=timestamp();;
74
75 ALTER TABLE "Basic" ADD FOREIGN KEY ("another_id")
76   REFERENCES "Another" ("id") DEFERRABLE;
77
78 SQL