setting the quote accessors separately no longer makes sense
[dbsrgits/SQL-Translator.git] / t / 48xml-to-sqlite.t
CommitLineData
8c4efd11 1#!/usr/bin/perl
2use strict;
3
4use FindBin qw/$Bin/;
5use Test::More;
6use Test::SQL::Translator;
7use Test::Exception;
4d438549 8use Test::Differences;
8c4efd11 9use Data::Dumper;
10use SQL::Translator;
11use SQL::Translator::Schema::Constants;
12
13
14BEGIN {
24d9fe69 15 maybe_plan(2, 'SQL::Translator::Parser::XML::SQLFairy',
8c4efd11 16 'SQL::Translator::Producer::SQLite');
17}
18
19my $xmlfile = "$Bin/data/xml/schema.xml";
20
21my $sqlt;
22$sqlt = SQL::Translator->new(
23 no_comments => 1,
ee91ab6f 24 show_warnings => 0,
8c4efd11 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 => 'SQLite',
33 filename => $xmlfile,
34) or die $sqlt->error;
35
4d438549 36eq_or_diff($sql, << "SQL");
8c4efd11 37BEGIN TRANSACTION;
38
f6e49d34 39DROP TABLE "Basic";
40
41CREATE TABLE "Basic" (
42 "id" INTEGER PRIMARY KEY NOT NULL,
43 "title" varchar(100) NOT NULL DEFAULT 'hello',
44 "description" text DEFAULT '',
45 "email" varchar(500),
46 "explicitnulldef" varchar,
47 "explicitemptystring" varchar DEFAULT '',
8c4efd11 48 -- Hello emptytagdef
f6e49d34 49 "emptytagdef" varchar DEFAULT '',
50 "another_id" int(10) DEFAULT 2,
51 "timest" timestamp,
52 FOREIGN KEY ("another_id") REFERENCES "Another"("id")
8c4efd11 53);
54
f6e49d34 55CREATE INDEX "titleindex" ON "Basic" ("title");
24d9fe69 56
f6e49d34 57CREATE UNIQUE INDEX "emailuniqueindex" ON "Basic" ("email");
8c4efd11 58
f6e49d34 59CREATE UNIQUE INDEX "very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms" ON "Basic" ("title");
3b9249fb 60
f6e49d34 61DROP TABLE "Another";
24d9fe69 62
f6e49d34 63CREATE TABLE "Another" (
64 "id" INTEGER PRIMARY KEY NOT NULL,
65 "num" numeric(10,2)
b08b5416 66);
67
f6e49d34 68DROP VIEW IF EXISTS "email_list";
4c0d31c1 69
f6e49d34 70CREATE VIEW "email_list" AS
3910f248 71 SELECT email FROM Basic WHERE (email IS NOT NULL);
ec59a597 72
f6e49d34 73DROP TRIGGER IF EXISTS "foo_trigger";
f9c96971 74
f6e49d34 75CREATE TRIGGER "foo_trigger" after insert on "Basic" BEGIN update modified=timestamp(); END;
f9c96971 76
f6e49d34 77DROP TRIGGER IF EXISTS "bar_trigger_insert";
410d4a42 78
f6e49d34 79CREATE TRIGGER "bar_trigger_insert" before insert on "Basic" BEGIN update modified2=timestamp(); END;
410d4a42 80
f6e49d34 81DROP TRIGGER IF EXISTS "bar_trigger_update";
410d4a42 82
f6e49d34 83CREATE TRIGGER "bar_trigger_update" before update on "Basic" BEGIN update modified2=timestamp(); END;
410d4a42 84
8c4efd11 85COMMIT;
86SQL
24d9fe69 87
88# Test in list context
89my @sql = $sqlt->translate(
90 from => 'XML-SQLFairy',
91 to => 'SQLite',
92 filename => $xmlfile,
93) or die $sqlt->error;
94
aee4b66e 95eq_or_diff(\@sql,
24d9fe69 96 [
b6b0696f 97 'BEGIN TRANSACTION',
f6e49d34 98 q<DROP TABLE "Basic">,
99 q<CREATE TABLE "Basic" (
100 "id" INTEGER PRIMARY KEY NOT NULL,
101 "title" varchar(100) NOT NULL DEFAULT 'hello',
102 "description" text DEFAULT '',
103 "email" varchar(500),
104 "explicitnulldef" varchar,
105 "explicitemptystring" varchar DEFAULT '',
24d9fe69 106 -- Hello emptytagdef
f6e49d34 107 "emptytagdef" varchar DEFAULT '',
108 "another_id" int(10) DEFAULT 2,
109 "timest" timestamp,
110 FOREIGN KEY ("another_id") REFERENCES "Another"("id")
d8cf2279 111)>,
f6e49d34 112 q<CREATE INDEX "titleindex" ON "Basic" ("title")>,
113 q<CREATE UNIQUE INDEX "emailuniqueindex" ON "Basic" ("email")>,
114 q<CREATE UNIQUE INDEX "very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms" ON "Basic" ("title")>,
115 q<DROP TABLE "Another">,
116 q<CREATE TABLE "Another" (
117 "id" INTEGER PRIMARY KEY NOT NULL,
118 "num" numeric(10,2)
d8cf2279 119)>,
f6e49d34 120 q<DROP VIEW IF EXISTS "email_list">,
121 q<CREATE VIEW "email_list" AS
d8cf2279 122 SELECT email FROM Basic WHERE (email IS NOT NULL)>,
f6e49d34 123 q<DROP TRIGGER IF EXISTS "foo_trigger">,
124 q<CREATE TRIGGER "foo_trigger" after insert on "Basic" BEGIN update modified=timestamp(); END>,
125 q<DROP TRIGGER IF EXISTS "bar_trigger_insert">,
126 q<CREATE TRIGGER "bar_trigger_insert" before insert on "Basic" BEGIN update modified2=timestamp(); END>,
127 q<DROP TRIGGER IF EXISTS "bar_trigger_update">,
128 q<CREATE TRIGGER "bar_trigger_update" before update on "Basic" BEGIN update modified2=timestamp(); END>,
410d4a42 129 'COMMIT',
130
24d9fe69 131 ], 'SQLite translate in list context matches');
132
133