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