Avoid warning about exiting sub with next
[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
8c4efd11 39DROP TABLE Basic;
24d9fe69 40
8c4efd11 41CREATE TABLE Basic (
42 id INTEGER PRIMARY KEY NOT NULL,
43 title varchar(100) NOT NULL DEFAULT 'hello',
44 description text DEFAULT '',
1022b157 45 email varchar(500),
8c4efd11 46 explicitnulldef varchar,
47 explicitemptystring varchar DEFAULT '',
48 -- Hello emptytagdef
08d91aad 49 emptytagdef varchar DEFAULT '',
06baeb21 50 another_id int(10) DEFAULT 2,
0dbd2362 51 timest timestamp,
52 FOREIGN KEY(another_id) REFERENCES Another()
8c4efd11 53);
54
963fd5fc 55CREATE INDEX titleindex ON Basic (title);
24d9fe69 56
963fd5fc 57CREATE UNIQUE INDEX emailuniqueindex ON Basic (email);
8c4efd11 58
3b9249fb 59CREATE UNIQUE INDEX very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms ON Basic (title);
60
b08b5416 61DROP TABLE Another;
24d9fe69 62
b08b5416 63CREATE TABLE Another (
9190556b 64 id INTEGER PRIMARY KEY NOT NULL,
65 num numeric(10,2)
b08b5416 66);
67
a25ac5d2 68DROP VIEW IF EXISTS email_list;
4c0d31c1 69
a25ac5d2 70CREATE VIEW email_list AS
3910f248 71 SELECT email FROM Basic WHERE (email IS NOT NULL);
ec59a597 72
f9c96971 73DROP TRIGGER IF EXISTS foo_trigger;
74
75CREATE TRIGGER foo_trigger after insert on Basic BEGIN update modified=timestamp(); END;
76
410d4a42 77DROP TRIGGER IF EXISTS bar_trigger_insert;
78
79CREATE TRIGGER bar_trigger_insert before insert on Basic BEGIN update modified2=timestamp(); END;
80
81DROP TRIGGER IF EXISTS bar_trigger_update;
82
83CREATE TRIGGER bar_trigger_update before update on Basic BEGIN update modified2=timestamp(); END;
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
f9c96971 95eq_or_diff(\@sql,
24d9fe69 96 [
b6b0696f 97 'BEGIN TRANSACTION',
24d9fe69 98 'DROP TABLE Basic',
99 'CREATE TABLE Basic (
100 id INTEGER PRIMARY KEY NOT NULL,
101 title varchar(100) NOT NULL DEFAULT \'hello\',
102 description text DEFAULT \'\',
1022b157 103 email varchar(500),
24d9fe69 104 explicitnulldef varchar,
105 explicitemptystring varchar DEFAULT \'\',
106 -- Hello emptytagdef
107 emptytagdef varchar DEFAULT \'\',
06baeb21 108 another_id int(10) DEFAULT 2,
0dbd2362 109 timest timestamp,
110 FOREIGN KEY(another_id) REFERENCES Another()
24d9fe69 111)',
963fd5fc 112 'CREATE INDEX titleindex ON Basic (title)',
113 'CREATE UNIQUE INDEX emailuniqueindex ON Basic (email)',
3b9249fb 114 'CREATE UNIQUE INDEX very_long_index_name_on_title_field_which_should_be_truncated_for_various_rdbms ON Basic (title)',
24d9fe69 115 'DROP TABLE Another',
116 'CREATE TABLE Another (
9190556b 117 id INTEGER PRIMARY KEY NOT NULL,
118 num numeric(10,2)
24d9fe69 119)',
4c0d31c1 120 'DROP VIEW IF EXISTS email_list',
121 'CREATE VIEW email_list AS
3910f248 122 SELECT email FROM Basic WHERE (email IS NOT NULL)',
f9c96971 123 'DROP TRIGGER IF EXISTS foo_trigger',
124 'CREATE TRIGGER foo_trigger after insert on Basic BEGIN update modified=timestamp(); END',
410d4a42 125 'DROP TRIGGER IF EXISTS bar_trigger_insert',
126 'CREATE TRIGGER bar_trigger_insert before insert on Basic BEGIN update modified2=timestamp(); END',
127 'DROP TRIGGER IF EXISTS bar_trigger_update',
128 'CREATE TRIGGER bar_trigger_update before update on Basic BEGIN update modified2=timestamp(); END',
129 'COMMIT',
130
24d9fe69 131 ], 'SQLite translate in list context matches');
132
133