Fix SQLite producer create_view so it doesn't generate statements with semicolons.
[dbsrgits/SQL-Translator.git] / t / 51-xml-to-oracle_quoted.t
CommitLineData
9522798b 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,
7769504d 22 quote_table_names => 1,
23 quote_field_names => 1,
9522798b 24 show_warnings => 0,
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 = [
43'DROP TABLE "Basic" CASCADE CONSTRAINTS',
44 'DROP SEQUENCE "sq_Basic_id"',
45 'CREATE SEQUENCE "sq_Basic_id"',
46 'CREATE TABLE "Basic" (
47 "id" number(10) NOT NULL,
48 "title" varchar2(100) DEFAULT \'hello\' NOT NULL,
d570aec7 49 "description" clob DEFAULT \'\',
9522798b 50 "email" varchar2(500),
e19efc15 51 "explicitnulldef" varchar2(4000),
52 "explicitemptystring" varchar2(4000) DEFAULT \'\',
53 "emptytagdef" varchar2(4000) DEFAULT \'\',
9522798b 54 "another_id" number(10) DEFAULT \'2\',
55 "timest" date,
56 PRIMARY KEY ("id"),
57 CONSTRAINT "Basic_emailuniqueindex" UNIQUE ("email")
58)',
59 'DROP TABLE "Another" CASCADE CONSTRAINTS',
60 'DROP SEQUENCE "sq_Another_id"',
61 'CREATE SEQUENCE "sq_Another_id"',
62 'CREATE TABLE "Another" (
63 "id" number(10) NOT NULL,
64 "num" number(10,2),
65 PRIMARY KEY ("id")
66)',
67'DROP VIEW "email_list"',
68 'CREATE VIEW "email_list" AS
69SELECT email FROM Basic WHERE (email IS NOT NULL)',
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"
72BEFORE INSERT ON "Basic"
73FOR EACH ROW WHEN (
74 new."id" IS NULL OR new."id" = 0
75)
76BEGIN
77 SELECT "sq_Basic_id".nextval
78 INTO :new."id"
79 FROM dual;
80END;
81',
82 'CREATE OR REPLACE TRIGGER "ts_Basic_timest"
83BEFORE INSERT OR UPDATE ON "Basic"
84FOR EACH ROW WHEN (new."timest" IS NULL)
85BEGIN
86 SELECT sysdate INTO :new."timest" FROM dual;
87END;
88',
89 'CREATE OR REPLACE TRIGGER "ai_Another_id"
90BEFORE INSERT ON "Another"
91FOR EACH ROW WHEN (
92 new."id" IS NULL OR new."id" = 0
93)
94BEGIN
95 SELECT "sq_Another_id".nextval
96 INTO :new."id"
97 FROM dual;
98END;
99',
100'CREATE INDEX "titleindex" on "Basic" ("title")'];
101
102is_deeply(\@sql, $want, 'Got correct Oracle statements in list context');
103
104is($sql_string, q|DROP TABLE "Basic" CASCADE CONSTRAINTS;
105
106DROP SEQUENCE "sq_Basic_id01";
107
108CREATE SEQUENCE "sq_Basic_id01";
109
110CREATE TABLE "Basic" (
111 "id" number(10) NOT NULL,
112 "title" varchar2(100) DEFAULT 'hello' NOT NULL,
d570aec7 113 "description" clob DEFAULT '',
9522798b 114 "email" varchar2(500),
e19efc15 115 "explicitnulldef" varchar2(4000),
116 "explicitemptystring" varchar2(4000) DEFAULT '',
117 "emptytagdef" varchar2(4000) DEFAULT '',
9522798b 118 "another_id" number(10) DEFAULT '2',
119 "timest" date,
120 PRIMARY KEY ("id"),
121 CONSTRAINT "Basic_emailuniqueindex" UNIQUE ("email")
122);
123
124DROP TABLE "Another" CASCADE CONSTRAINTS;
125
126DROP SEQUENCE "sq_Another_id01";
127
128CREATE SEQUENCE "sq_Another_id01";
129
130CREATE TABLE "Another" (
131 "id" number(10) NOT NULL,
132 "num" number(10,2),
133 PRIMARY KEY ("id")
134);
135
136DROP VIEW "email_list";
137
138CREATE VIEW "email_list" AS
139SELECT email FROM Basic WHERE (email IS NOT NULL);
140
141ALTER TABLE "Basic" ADD CONSTRAINT "Basic_another_id_fk01" FOREIGN KEY ("another_id") REFERENCES "Another" ("id");
142
143CREATE INDEX "titleindex01" on "Basic" ("title");
144
145CREATE OR REPLACE TRIGGER "ai_Basic_id01"
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;
155/
156
157CREATE OR REPLACE TRIGGER "ts_Basic_timest01"
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
165CREATE OR REPLACE TRIGGER "ai_Another_id01"
166BEFORE INSERT ON "Another"
167FOR EACH ROW WHEN (
168 new."id" IS NULL OR new."id" = 0
169)
170BEGIN
171 SELECT "sq_Another_id01".nextval
172 INTO :new."id"
173 FROM dual;
174END;
175/
176
177|);