When adding the edges, it's necessary to quote the table names exactly the
[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,
3dbdbf99 22 show_warnings => 0,
e56dabb7 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 = [
d6828ad7 41'DROP TABLE Basic CASCADE CONSTRAINTS',
42 'DROP SEQUENCE sq_Basic_id',
43 'CREATE SEQUENCE sq_Basic_id',
e56dabb7 44 'CREATE TABLE Basic (
45 id number(10) NOT NULL,
46 title varchar2(100) DEFAULT \'hello\' NOT NULL,
47 description clob DEFAULT \'\',
21d62b63 48 email varchar2(500),
e56dabb7 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)
d6828ad7 56)',
57 'DROP TABLE Another CASCADE CONSTRAINTS',
58 'DROP SEQUENCE sq_Another_id',
59 'CREATE SEQUENCE sq_Another_id',
e56dabb7 60 'CREATE TABLE Another (
61 id number(10) NOT NULL,
9190556b 62 num number(10,2),
e56dabb7 63 PRIMARY KEY (id)
d6828ad7 64)',
e56dabb7 65 'CREATE VIEW email_list AS
3910f248 66SELECT email FROM Basic WHERE (email IS NOT NULL)',
d6828ad7 67 'ALTER TABLE Basic ADD CONSTRAINT Basic_another_id_fk FOREIGN KEY (another_id) REFERENCES Another (id)',
68 'CREATE OR REPLACE TRIGGER ai_Basic_id
e56dabb7 69BEFORE INSERT ON Basic
70FOR EACH ROW WHEN (
71 new.id IS NULL OR new.id = 0
72)
73BEGIN
d6828ad7 74 SELECT sq_Basic_id.nextval
e56dabb7 75 INTO :new.id
76 FROM dual;
77END;
d6828ad7 78',
79 'CREATE OR REPLACE TRIGGER ts_Basic_timest
e56dabb7 80BEFORE INSERT OR UPDATE ON Basic
81FOR EACH ROW WHEN (new.timest IS NULL)
82BEGIN
83 SELECT sysdate INTO :new.timest FROM dual;
84END;
d6828ad7 85',
86 'CREATE OR REPLACE TRIGGER ai_Another_id
e56dabb7 87BEFORE INSERT ON Another
88FOR EACH ROW WHEN (
89 new.id IS NULL OR new.id = 0
90)
91BEGIN
d6828ad7 92 SELECT sq_Another_id.nextval
e56dabb7 93 INTO :new.id
94 FROM dual;
95END;
d6828ad7 96',
97'CREATE INDEX titleindex on Basic (title)'];
e56dabb7 98
99is_deeply(\@sql, $want, 'Got correct Oracle statements in list context');
100
101is($sql_string, q|DROP TABLE Basic CASCADE CONSTRAINTS;
102
d6828ad7 103DROP SEQUENCE sq_Basic_id01;
e56dabb7 104
d6828ad7 105CREATE SEQUENCE sq_Basic_id01;
e56dabb7 106
107CREATE TABLE Basic (
108 id number(10) NOT NULL,
109 title varchar2(100) DEFAULT 'hello' NOT NULL,
110 description clob DEFAULT '',
21d62b63 111 email varchar2(500),
e56dabb7 112 explicitnulldef varchar2,
113 explicitemptystring varchar2 DEFAULT '',
114 emptytagdef varchar2 DEFAULT '',
115 another_id number(10) DEFAULT '2',
116 timest date,
117 PRIMARY KEY (id),
118 CONSTRAINT emailuniqueindex UNIQUE (email)
119);
120
121DROP TABLE Another CASCADE CONSTRAINTS;
122
d6828ad7 123DROP SEQUENCE sq_Another_id01;
e56dabb7 124
d6828ad7 125CREATE SEQUENCE sq_Another_id01;
e56dabb7 126
127CREATE TABLE Another (
128 id number(10) NOT NULL,
9190556b 129 num number(10,2),
e56dabb7 130 PRIMARY KEY (id)
131);
132
133CREATE VIEW email_list AS
3910f248 134SELECT email FROM Basic WHERE (email IS NOT NULL);
e56dabb7 135
d6828ad7 136ALTER TABLE Basic ADD CONSTRAINT Basic_another_id_fk01 FOREIGN KEY (another_id) REFERENCES Another (id);
e56dabb7 137
d6828ad7 138CREATE INDEX titleindex01 on Basic (title);
e56dabb7 139
d6828ad7 140CREATE OR REPLACE TRIGGER ai_Basic_id01
e56dabb7 141BEFORE INSERT ON Basic
142FOR EACH ROW WHEN (
143 new.id IS NULL OR new.id = 0
144)
145BEGIN
146 SELECT sq_Basic_id01.nextval
147 INTO :new.id
148 FROM dual;
149END;
e56dabb7 150/
151
d6828ad7 152CREATE OR REPLACE TRIGGER ts_Basic_timest01
e56dabb7 153BEFORE INSERT OR UPDATE ON Basic
154FOR EACH ROW WHEN (new.timest IS NULL)
155BEGIN
156 SELECT sysdate INTO :new.timest FROM dual;
157END;
158/
159
d6828ad7 160CREATE OR REPLACE TRIGGER ai_Another_id01
e56dabb7 161BEFORE INSERT ON Another
162FOR EACH ROW WHEN (
163 new.id IS NULL OR new.id = 0
164)
165BEGIN
d6828ad7 166 SELECT sq_Another_id01.nextval
e56dabb7 167 INTO :new.id
168 FROM dual;
169END;
170/|);