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