initial things don't look at this yet
[dbsrgits/SQL-Translator.git] / t / 51-xml-to-oracle.t
1 #!/usr/bin/perl
2 use strict;
3
4 use FindBin qw/$Bin/;
5 use Test::More;
6 use Test::SQL::Translator;
7 use Test::Exception;
8 use Data::Dumper;
9 use SQL::Translator;
10 use SQL::Translator::Schema::Constants;
11
12 BEGIN {
13     maybe_plan(2, 'SQL::Translator::Parser::XML::SQLFairy',
14                   'SQL::Translator::Producer::Oracle');
15 }
16
17 my $xmlfile = "$Bin/data/xml/schema.xml";
18
19 my $sqlt;
20 $sqlt = SQL::Translator->new(
21     no_comments => 1,
22     show_warnings  => 0,
23     add_drop_table => 1,
24 );
25
26 die "Can't find test schema $xmlfile" unless -e $xmlfile;
27
28 my @sql = $sqlt->translate(
29     from     => 'XML-SQLFairy',
30     to       => 'Oracle',
31     filename => $xmlfile,
32 ) or die $sqlt->error;
33
34 my $sql_string = $sqlt->translate(
35     from     => 'XML-SQLFairy',
36     to       => 'Oracle',
37     filename => $xmlfile,
38 ) or die $sqlt->error;
39
40 my $want = [ 
41 'DROP TABLE Basic CASCADE CONSTRAINTS',
42           'DROP SEQUENCE sq_Basic_id',
43           'CREATE SEQUENCE sq_Basic_id',
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(500),
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 Basic_emailuniqueindex UNIQUE (email)
56 )',
57           'DROP TABLE Another CASCADE CONSTRAINTS',
58           'DROP SEQUENCE sq_Another_id',
59           'CREATE SEQUENCE sq_Another_id',
60           'CREATE TABLE Another (
61   id number(10) NOT NULL,
62   num number(10,2),
63   PRIMARY KEY (id)
64 )',
65 'DROP VIEW email_list',
66           'CREATE VIEW email_list AS
67 SELECT email FROM Basic WHERE (email IS NOT NULL)',
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
70 BEFORE INSERT ON Basic
71 FOR EACH ROW WHEN (
72  new.id IS NULL OR new.id = 0
73 )
74 BEGIN
75  SELECT sq_Basic_id.nextval
76  INTO :new.id
77  FROM dual;
78 END;
79 ',
80           'CREATE OR REPLACE TRIGGER ts_Basic_timest
81 BEFORE INSERT OR UPDATE ON Basic
82 FOR EACH ROW WHEN (new.timest IS NULL)
83 BEGIN 
84  SELECT sysdate INTO :new.timest FROM dual;
85 END;
86 ',
87           'CREATE OR REPLACE TRIGGER ai_Another_id
88 BEFORE INSERT ON Another
89 FOR EACH ROW WHEN (
90  new.id IS NULL OR new.id = 0
91 )
92 BEGIN
93  SELECT sq_Another_id.nextval
94  INTO :new.id
95  FROM dual;
96 END;
97 ',
98 'CREATE INDEX titleindex on Basic (title)'];
99
100 is_deeply(\@sql, $want, 'Got correct Oracle statements in list context');
101
102 is($sql_string, q|DROP TABLE Basic CASCADE CONSTRAINTS;
103
104 DROP SEQUENCE sq_Basic_id01;
105
106 CREATE SEQUENCE sq_Basic_id01;
107
108 CREATE TABLE Basic (
109   id number(10) NOT NULL,
110   title varchar2(100) DEFAULT 'hello' NOT NULL,
111   description clob DEFAULT '',
112   email varchar2(500),
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),
119   CONSTRAINT Basic_emailuniqueindex UNIQUE (email)
120 );
121
122 DROP TABLE Another CASCADE CONSTRAINTS;
123
124 DROP SEQUENCE sq_Another_id01;
125
126 CREATE SEQUENCE sq_Another_id01;
127
128 CREATE TABLE Another (
129   id number(10) NOT NULL,
130   num number(10,2),
131   PRIMARY KEY (id)
132 );
133
134 DROP VIEW email_list;
135
136 CREATE VIEW email_list AS
137 SELECT email FROM Basic WHERE (email IS NOT NULL);
138
139 ALTER TABLE Basic ADD CONSTRAINT Basic_another_id_fk01 FOREIGN KEY (another_id) REFERENCES Another (id);
140
141 CREATE INDEX titleindex01 on Basic (title);
142
143 CREATE OR REPLACE TRIGGER ai_Basic_id01
144 BEFORE INSERT ON Basic
145 FOR EACH ROW WHEN (
146  new.id IS NULL OR new.id = 0
147 )
148 BEGIN
149  SELECT sq_Basic_id01.nextval
150  INTO :new.id
151  FROM dual;
152 END;
153 /
154
155 CREATE OR REPLACE TRIGGER ts_Basic_timest01
156 BEFORE INSERT OR UPDATE ON Basic
157 FOR EACH ROW WHEN (new.timest IS NULL)
158 BEGIN 
159  SELECT sysdate INTO :new.timest FROM dual;
160 END;
161 /
162
163 CREATE OR REPLACE TRIGGER ai_Another_id01
164 BEFORE INSERT ON Another
165 FOR EACH ROW WHEN (
166  new.id IS NULL OR new.id = 0
167 )
168 BEGIN
169  SELECT sq_Another_id01.nextval
170  INTO :new.id
171  FROM dual;
172 END;
173 /
174
175 |);