Merge 'oracle_datatypes' into 'trunk'
[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");
f9c96971 37
38
8c4efd11 39BEGIN TRANSACTION;
40
8c4efd11 41DROP TABLE Basic;
24d9fe69 42
8c4efd11 43CREATE TABLE Basic (
44 id INTEGER PRIMARY KEY NOT NULL,
45 title varchar(100) NOT NULL DEFAULT 'hello',
46 description text DEFAULT '',
1022b157 47 email varchar(500),
8c4efd11 48 explicitnulldef varchar,
49 explicitemptystring varchar DEFAULT '',
50 -- Hello emptytagdef
08d91aad 51 emptytagdef varchar DEFAULT '',
b08b5416 52 another_id int(10) DEFAULT '2',
08d91aad 53 timest timestamp
8c4efd11 54);
55
963fd5fc 56CREATE INDEX titleindex ON Basic (title);
24d9fe69 57
963fd5fc 58CREATE UNIQUE INDEX emailuniqueindex ON Basic (email);
8c4efd11 59
b08b5416 60DROP TABLE Another;
24d9fe69 61
b08b5416 62CREATE TABLE Another (
9190556b 63 id INTEGER PRIMARY KEY NOT NULL,
64 num numeric(10,2)
b08b5416 65);
66
a25ac5d2 67DROP VIEW IF EXISTS email_list;
68CREATE VIEW email_list AS
3910f248 69 SELECT email FROM Basic WHERE (email IS NOT NULL);
ec59a597 70
f9c96971 71DROP TRIGGER IF EXISTS foo_trigger;
72
73CREATE TRIGGER foo_trigger after insert on Basic BEGIN update modified=timestamp(); END;
74
410d4a42 75DROP TRIGGER IF EXISTS bar_trigger_insert;
76
77CREATE TRIGGER bar_trigger_insert before insert on Basic BEGIN update modified2=timestamp(); END;
78
79DROP TRIGGER IF EXISTS bar_trigger_update;
80
81CREATE TRIGGER bar_trigger_update before update on Basic BEGIN update modified2=timestamp(); END;
82
8c4efd11 83COMMIT;
84SQL
24d9fe69 85
86# Test in list context
87my @sql = $sqlt->translate(
88 from => 'XML-SQLFairy',
89 to => 'SQLite',
90 filename => $xmlfile,
91) or die $sqlt->error;
92
f9c96971 93eq_or_diff(\@sql,
24d9fe69 94 [
f9c96971 95 "\n\nBEGIN TRANSACTION",
24d9fe69 96 'DROP TABLE Basic',
97 'CREATE TABLE Basic (
98 id INTEGER PRIMARY KEY NOT NULL,
99 title varchar(100) NOT NULL DEFAULT \'hello\',
100 description text DEFAULT \'\',
1022b157 101 email varchar(500),
24d9fe69 102 explicitnulldef varchar,
103 explicitemptystring varchar DEFAULT \'\',
104 -- Hello emptytagdef
105 emptytagdef varchar DEFAULT \'\',
106 another_id int(10) DEFAULT \'2\',
107 timest timestamp
108)',
963fd5fc 109 'CREATE INDEX titleindex ON Basic (title)',
110 'CREATE UNIQUE INDEX emailuniqueindex ON Basic (email)',
24d9fe69 111 'DROP TABLE Another',
112 'CREATE TABLE Another (
9190556b 113 id INTEGER PRIMARY KEY NOT NULL,
114 num numeric(10,2)
24d9fe69 115)',
116 'DROP VIEW IF EXISTS email_list;
117CREATE VIEW email_list AS
3910f248 118 SELECT email FROM Basic WHERE (email IS NOT NULL)',
f9c96971 119 'DROP TRIGGER IF EXISTS foo_trigger',
120 'CREATE TRIGGER foo_trigger after insert on Basic BEGIN update modified=timestamp(); END',
410d4a42 121 'DROP TRIGGER IF EXISTS bar_trigger_insert',
122 'CREATE TRIGGER bar_trigger_insert before insert on Basic BEGIN update modified2=timestamp(); END',
123 'DROP TRIGGER IF EXISTS bar_trigger_update',
124 'CREATE TRIGGER bar_trigger_update before update on Basic BEGIN update modified2=timestamp(); END',
125 'COMMIT',
126
24d9fe69 127 ], 'SQLite translate in list context matches');
128
129