Only output trigger 'scope' if it's set in YAML and JSON producers
[dbsrgits/SQL-Translator.git] / t / 51-xml-to-oracle_quoted.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 BEGIN {
14     maybe_plan(2, 'SQL::Translator::Parser::XML::SQLFairy',
15                   'SQL::Translator::Producer::Oracle');
16 }
17
18 my $xmlfile = "$Bin/data/xml/schema.xml";
19
20 my $sqlt;
21 $sqlt = SQL::Translator->new(
22     no_comments => 1,
23     quote_table_names => 1,
24     quote_field_names => 1,
25     show_warnings  => 0,
26     add_drop_table => 1,
27 );
28
29 die "Can't find test schema $xmlfile" unless -e $xmlfile;
30
31 my @sql = $sqlt->translate(
32     from     => 'XML-SQLFairy',
33     to       => 'Oracle',
34     filename => $xmlfile,
35 ) or die $sqlt->error;
36
37 my $sql_string = $sqlt->translate(
38     from     => 'XML-SQLFairy',
39     to       => 'Oracle',
40     filename => $xmlfile,
41 ) or die $sqlt->error;
42
43 my $want = [
44 'DROP TABLE "Basic" CASCADE CONSTRAINTS',
45           'DROP SEQUENCE "sq_Basic_id"',
46           'CREATE SEQUENCE "sq_Basic_id"',
47           'CREATE TABLE "Basic" (
48   "id" number(10) NOT NULL,
49   "title" varchar2(100) DEFAULT \'hello\' NOT NULL,
50   "description" clob DEFAULT \'\',
51   "email" varchar2(500),
52   "explicitnulldef" varchar2(4000),
53   "explicitemptystring" varchar2(4000) DEFAULT \'\',
54   "emptytagdef" varchar2(4000) DEFAULT \'\',
55   "another_id" number(10) DEFAULT \'2\',
56   "timest" date,
57   PRIMARY KEY ("id"),
58   CONSTRAINT "u_Basic_emailuniqueindex" UNIQUE ("email"),
59   CONSTRAINT "u_Basic_very_long_index_name_o" UNIQUE ("title")
60 )',
61           'DROP TABLE "Another" CASCADE CONSTRAINTS',
62           'DROP SEQUENCE "sq_Another_id"',
63           'CREATE SEQUENCE "sq_Another_id"',
64           'CREATE TABLE "Another" (
65   "id" number(10) NOT NULL,
66   "num" number(10,2),
67   PRIMARY KEY ("id")
68 )',
69 'DROP VIEW "email_list"',
70           'CREATE VIEW "email_list" AS
71 SELECT email FROM Basic WHERE (email IS NOT NULL)',
72           'ALTER TABLE "Basic" ADD CONSTRAINT "Basic_another_id_fk" FOREIGN KEY ("another_id") REFERENCES "Another" ("id")',
73           'CREATE OR REPLACE TRIGGER "ai_Basic_id"
74 BEFORE INSERT ON "Basic"
75 FOR EACH ROW WHEN (
76  new."id" IS NULL OR new."id" = 0
77 )
78 BEGIN
79  SELECT "sq_Basic_id".nextval
80  INTO :new."id"
81  FROM dual;
82 END;
83 ',
84           'CREATE OR REPLACE TRIGGER "ts_Basic_timest"
85 BEFORE INSERT OR UPDATE ON "Basic"
86 FOR EACH ROW WHEN (new."timest" IS NULL)
87 BEGIN
88  SELECT sysdate INTO :new."timest" FROM dual;
89 END;
90 ',
91           'CREATE OR REPLACE TRIGGER "ai_Another_id"
92 BEFORE INSERT ON "Another"
93 FOR EACH ROW WHEN (
94  new."id" IS NULL OR new."id" = 0
95 )
96 BEGIN
97  SELECT "sq_Another_id".nextval
98  INTO :new."id"
99  FROM dual;
100 END;
101 ',
102 'CREATE INDEX "titleindex" on "Basic" ("title")'];
103
104 is_deeply(\@sql, $want, 'Got correct Oracle statements in list context');
105
106 eq_or_diff($sql_string, q|DROP TABLE "Basic" CASCADE CONSTRAINTS;
107
108 DROP SEQUENCE "sq_Basic_id01";
109
110 CREATE SEQUENCE "sq_Basic_id01";
111
112 CREATE TABLE "Basic" (
113   "id" number(10) NOT NULL,
114   "title" varchar2(100) DEFAULT 'hello' NOT NULL,
115   "description" clob DEFAULT '',
116   "email" varchar2(500),
117   "explicitnulldef" varchar2(4000),
118   "explicitemptystring" varchar2(4000) DEFAULT '',
119   "emptytagdef" varchar2(4000) DEFAULT '',
120   "another_id" number(10) DEFAULT '2',
121   "timest" date,
122   PRIMARY KEY ("id"),
123   CONSTRAINT "u_Basic_emailuniqueindex01" UNIQUE ("email"),
124   CONSTRAINT "u_Basic_very_long_index_name01" UNIQUE ("title")
125 );
126
127 DROP TABLE "Another" CASCADE CONSTRAINTS;
128
129 DROP SEQUENCE "sq_Another_id01";
130
131 CREATE SEQUENCE "sq_Another_id01";
132
133 CREATE TABLE "Another" (
134   "id" number(10) NOT NULL,
135   "num" number(10,2),
136   PRIMARY KEY ("id")
137 );
138
139 DROP VIEW "email_list";
140
141 CREATE VIEW "email_list" AS
142 SELECT email FROM Basic WHERE (email IS NOT NULL);
143
144 ALTER TABLE "Basic" ADD CONSTRAINT "Basic_another_id_fk01" FOREIGN KEY ("another_id") REFERENCES "Another" ("id");
145
146 CREATE INDEX "titleindex01" on "Basic" ("title");
147
148 CREATE OR REPLACE TRIGGER "ai_Basic_id01"
149 BEFORE INSERT ON "Basic"
150 FOR EACH ROW WHEN (
151  new."id" IS NULL OR new."id" = 0
152 )
153 BEGIN
154  SELECT "sq_Basic_id01".nextval
155  INTO :new."id"
156  FROM dual;
157 END;
158 /
159
160 CREATE OR REPLACE TRIGGER "ts_Basic_timest01"
161 BEFORE INSERT OR UPDATE ON "Basic"
162 FOR EACH ROW WHEN (new."timest" IS NULL)
163 BEGIN
164  SELECT sysdate INTO :new."timest" FROM dual;
165 END;
166 /
167
168 CREATE OR REPLACE TRIGGER "ai_Another_id01"
169 BEFORE INSERT ON "Another"
170 FOR EACH ROW WHEN (
171  new."id" IS NULL OR new."id" = 0
172 )
173 BEGIN
174  SELECT "sq_Another_id01".nextval
175  INTO :new."id"
176  FROM dual;
177 END;
178 /
179
180 |);