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