implements options in oracle indexes
[dbsrgits/SQL-Translator.git] / t / 51-xml-to-oracle.t
CommitLineData
e56dabb7 1#!/usr/bin/perl
2use strict;
3
4use FindBin qw/$Bin/;
5use Test::More;
6use Test::SQL::Translator;
7use Test::Exception;
8use Data::Dumper;
9use SQL::Translator;
10use SQL::Translator::Schema::Constants;
11
12BEGIN {
13 maybe_plan(2, 'SQL::Translator::Parser::XML::SQLFairy',
14 'SQL::Translator::Producer::Oracle');
15}
16
17my $xmlfile = "$Bin/data/xml/schema.xml";
18
19my $sqlt;
20$sqlt = SQL::Translator->new(
21 no_comments => 1,
22 show_warnings => 1,
23 add_drop_table => 1,
24);
25
26die "Can't find test schema $xmlfile" unless -e $xmlfile;
27
28my @sql = $sqlt->translate(
29 from => 'XML-SQLFairy',
30 to => 'Oracle',
31 filename => $xmlfile,
32) or die $sqlt->error;
33
34my $sql_string = $sqlt->translate(
35 from => 'XML-SQLFairy',
36 to => 'Oracle',
37 filename => $xmlfile,
38) or die $sqlt->error;
39
40my $want = [
41'DROP TABLE Basic CASCADE CONSTRAINTS;',
42 'DROP SEQUENCE sq_Basic_id01;',
43 'CREATE SEQUENCE sq_Basic_id01;',
44 'CREATE TABLE Basic (
45 id number(10) NOT NULL,
46 title varchar2(100) DEFAULT \'hello\' NOT NULL,
47 description clob DEFAULT \'\',
48 email varchar2(255),
49 explicitnulldef varchar2,
50 explicitemptystring varchar2 DEFAULT \'\',
51 emptytagdef varchar2 DEFAULT \'\',
52 another_id number(10) DEFAULT \'2\',
53 timest date,
54 PRIMARY KEY (id),
55 CONSTRAINT emailuniqueindex UNIQUE (email)
56);',
57 'DROP TABLE Another CASCADE CONSTRAINTS;',
58 'DROP SEQUENCE sq_Another_id01;',
59 'CREATE SEQUENCE sq_Another_id01;',
60 'CREATE TABLE Another (
61 id number(10) NOT NULL,
62 PRIMARY KEY (id)
63);',
64 'CREATE VIEW email_list AS
65SELECT email FROM Basic WHERE email IS NOT NULL;',
66 'ALTER TABLE Basic ADD CONSTRAINT Basic_another_id_fk01 FOREIGN KEY (another_id) REFERENCES Another (id);',
67 'CREATE OR REPLACE TRIGGER ai_Basic_id01
68BEFORE INSERT ON Basic
69FOR EACH ROW WHEN (
70 new.id IS NULL OR new.id = 0
71)
72BEGIN
73 SELECT sq_Basic_id01.nextval
74 INTO :new.id
75 FROM dual;
76END;
77/',
78 'CREATE OR REPLACE TRIGGER ts_Basic_timest01
79BEFORE INSERT OR UPDATE ON Basic
80FOR EACH ROW WHEN (new.timest IS NULL)
81BEGIN
82 SELECT sysdate INTO :new.timest FROM dual;
83END;
84/',
85 'CREATE OR REPLACE TRIGGER ai_Another_id01
86BEFORE INSERT ON Another
87FOR EACH ROW WHEN (
88 new.id IS NULL OR new.id = 0
89)
90BEGIN
91 SELECT sq_Another_id01.nextval
92 INTO :new.id
93 FROM dual;
94END;
95/'];
96
97is_deeply(\@sql, $want, 'Got correct Oracle statements in list context');
98
99is($sql_string, q|DROP TABLE Basic CASCADE CONSTRAINTS;
100
101DROP SEQUENCE sq_Basic_id02;
102
103CREATE SEQUENCE sq_Basic_id02;
104
105CREATE TABLE Basic (
106 id number(10) NOT NULL,
107 title varchar2(100) DEFAULT 'hello' NOT NULL,
108 description clob DEFAULT '',
109 email varchar2(255),
110 explicitnulldef varchar2,
111 explicitemptystring varchar2 DEFAULT '',
112 emptytagdef varchar2 DEFAULT '',
113 another_id number(10) DEFAULT '2',
114 timest date,
115 PRIMARY KEY (id),
116 CONSTRAINT emailuniqueindex UNIQUE (email)
117);
118
119DROP TABLE Another CASCADE CONSTRAINTS;
120
121DROP SEQUENCE sq_Another_id02;
122
123CREATE SEQUENCE sq_Another_id02;
124
125CREATE TABLE Another (
126 id number(10) NOT NULL,
127 PRIMARY KEY (id)
128);
129
130CREATE VIEW email_list AS
131SELECT email FROM Basic WHERE email IS NOT NULL;
132
133ALTER TABLE Basic ADD CONSTRAINT Basic_another_id_fk02 FOREIGN KEY (another_id) REFERENCES Another (id);
134
135CREATE OR REPLACE TRIGGER ai_Basic_id02
136BEFORE INSERT ON Basic
137FOR EACH ROW WHEN (
138 new.id IS NULL OR new.id = 0
139)
140BEGIN
141 SELECT sq_Basic_id02.nextval
142 INTO :new.id
143 FROM dual;
144END;
145/
146
147CREATE OR REPLACE TRIGGER ts_Basic_timest02
148BEFORE INSERT OR UPDATE ON Basic
149FOR EACH ROW WHEN (new.timest IS NULL)
150BEGIN
151 SELECT sysdate INTO :new.timest FROM dual;
152END;
153/
154
155CREATE OR REPLACE TRIGGER ai_Another_id02
156BEFORE INSERT ON Another
157FOR EACH ROW WHEN (
158 new.id IS NULL OR new.id = 0
159)
160BEGIN
161 SELECT sq_Another_id02.nextval
162 INTO :new.id
163 FROM dual;
164END;
165/|);
166#!/usr/bin/perl
167use strict;
168
169use FindBin qw/$Bin/;
170use Test::More;
171use Test::SQL::Translator;
172use Test::Exception;
173use Data::Dumper;
174use SQL::Translator;
175use SQL::Translator::Schema::Constants;
176
177BEGIN {
178 maybe_plan(2, 'SQL::Translator::Parser::XML::SQLFairy',
179 'SQL::Translator::Producer::Oracle');
180}
181
182my $xmlfile = "$Bin/data/xml/schema.xml";
183
184my $sqlt;
185$sqlt = SQL::Translator->new(
186 no_comments => 1,
187 show_warnings => 1,
188 add_drop_table => 1,
189);
190
191die "Can't find test schema $xmlfile" unless -e $xmlfile;
192
193my @sql = $sqlt->translate(
194 from => 'XML-SQLFairy',
195 to => 'Oracle',
196 filename => $xmlfile,
197) or die $sqlt->error;
198
199my $sql_string = $sqlt->translate(
200 from => 'XML-SQLFairy',
201 to => 'Oracle',
202 filename => $xmlfile,
203) or die $sqlt->error;
204
205my $want = [
206'DROP TABLE Basic CASCADE CONSTRAINTS;',
207 'DROP SEQUENCE sq_Basic_id01;',
208 'CREATE SEQUENCE sq_Basic_id01;',
209 'CREATE TABLE Basic (
210 id number(10) NOT NULL,
211 title varchar2(100) DEFAULT \'hello\' NOT NULL,
212 description clob DEFAULT \'\',
213 email varchar2(255),
214 explicitnulldef varchar2,
215 explicitemptystring varchar2 DEFAULT \'\',
216 emptytagdef varchar2 DEFAULT \'\',
217 another_id number(10) DEFAULT \'2\',
218 timest date,
219 PRIMARY KEY (id),
220 CONSTRAINT emailuniqueindex UNIQUE (email)
221);',
222 'DROP TABLE Another CASCADE CONSTRAINTS;',
223 'DROP SEQUENCE sq_Another_id01;',
224 'CREATE SEQUENCE sq_Another_id01;',
225 'CREATE TABLE Another (
226 id number(10) NOT NULL,
227 PRIMARY KEY (id)
228);',
229 'CREATE VIEW email_list AS
230SELECT email FROM Basic WHERE email IS NOT NULL;',
231 'ALTER TABLE Basic ADD CONSTRAINT Basic_another_id_fk01 FOREIGN KEY (another_id) REFERENCES Another (id);',
232 'CREATE OR REPLACE TRIGGER ai_Basic_id01
233BEFORE INSERT ON Basic
234FOR EACH ROW WHEN (
235 new.id IS NULL OR new.id = 0
236)
237BEGIN
238 SELECT sq_Basic_id01.nextval
239 INTO :new.id
240 FROM dual;
241END;
242/',
243 'CREATE OR REPLACE TRIGGER ts_Basic_timest01
244BEFORE INSERT OR UPDATE ON Basic
245FOR EACH ROW WHEN (new.timest IS NULL)
246BEGIN
247 SELECT sysdate INTO :new.timest FROM dual;
248END;
249/',
250 'CREATE OR REPLACE TRIGGER ai_Another_id01
251BEFORE INSERT ON Another
252FOR EACH ROW WHEN (
253 new.id IS NULL OR new.id = 0
254)
255BEGIN
256 SELECT sq_Another_id01.nextval
257 INTO :new.id
258 FROM dual;
259END;
260/'];
261
262is_deeply(\@sql, $want, 'Got correct Oracle statements in list context');
263
264is($sql_string, q|DROP TABLE Basic CASCADE CONSTRAINTS;
265
266DROP SEQUENCE sq_Basic_id02;
267
268CREATE SEQUENCE sq_Basic_id02;
269
270CREATE TABLE Basic (
271 id number(10) NOT NULL,
272 title varchar2(100) DEFAULT 'hello' NOT NULL,
273 description clob DEFAULT '',
274 email varchar2(255),
275 explicitnulldef varchar2,
276 explicitemptystring varchar2 DEFAULT '',
277 emptytagdef varchar2 DEFAULT '',
278 another_id number(10) DEFAULT '2',
279 timest date,
280 PRIMARY KEY (id),
281 CONSTRAINT emailuniqueindex UNIQUE (email)
282);
283
284DROP TABLE Another CASCADE CONSTRAINTS;
285
286DROP SEQUENCE sq_Another_id02;
287
288CREATE SEQUENCE sq_Another_id02;
289
290CREATE TABLE Another (
291 id number(10) NOT NULL,
292 PRIMARY KEY (id)
293);
294
295CREATE VIEW email_list AS
296SELECT email FROM Basic WHERE email IS NOT NULL;
297
298ALTER TABLE Basic ADD CONSTRAINT Basic_another_id_fk02 FOREIGN KEY (another_id) REFERENCES Another (id);
299
300CREATE OR REPLACE TRIGGER ai_Basic_id02
301BEFORE INSERT ON Basic
302FOR EACH ROW WHEN (
303 new.id IS NULL OR new.id = 0
304)
305BEGIN
306 SELECT sq_Basic_id02.nextval
307 INTO :new.id
308 FROM dual;
309END;
310/
311
312CREATE OR REPLACE TRIGGER ts_Basic_timest02
313BEFORE INSERT OR UPDATE ON Basic
314FOR EACH ROW WHEN (new.timest IS NULL)
315BEGIN
316 SELECT sysdate INTO :new.timest FROM dual;
317END;
318/
319
320CREATE OR REPLACE TRIGGER ai_Another_id02
321BEFORE INSERT ON Another
322FOR EACH ROW WHEN (
323 new.id IS NULL OR new.id = 0
324)
325BEGIN
326 SELECT sq_Another_id02.nextval
327 INTO :new.id
328 FROM dual;
329END;
330/|);