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