By royal decree, produced statements in list context shall not end in a semi-colon...
[dbsrgits/SQL-Translator.git] / t / 48xml-to-sqlite.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 Test::Differences;
9 use Data::Dumper;
10 use SQL::Translator;
11 use SQL::Translator::Schema::Constants;
12
13
14 BEGIN {
15     maybe_plan(2, 'SQL::Translator::Parser::XML::SQLFairy',
16               'SQL::Translator::Producer::SQLite');
17 }
18
19 my $xmlfile = "$Bin/data/xml/schema.xml";
20
21 my $sqlt;
22 $sqlt = SQL::Translator->new(
23     no_comments => 1,
24     show_warnings  => 1,
25     add_drop_table => 1,
26 );
27
28 die "Can't find test schema $xmlfile" unless -e $xmlfile;
29
30 my $sql = $sqlt->translate(
31     from     => 'XML-SQLFairy',
32     to       => 'SQLite',
33     filename => $xmlfile,
34 ) or die $sqlt->error;
35
36 eq_or_diff($sql, << "SQL");
37 BEGIN TRANSACTION;
38
39 DROP TABLE Basic;
40
41 CREATE TABLE Basic (
42   id INTEGER PRIMARY KEY NOT NULL,
43   title varchar(100) NOT NULL DEFAULT 'hello',
44   description text DEFAULT '',
45   email varchar(255),
46   explicitnulldef varchar,
47   explicitemptystring varchar DEFAULT '',
48   -- Hello emptytagdef
49   emptytagdef varchar DEFAULT '',
50   another_id int(10) DEFAULT '2',
51   timest timestamp
52 );
53
54 CREATE INDEX titleindex_Basic ON Basic (title);
55
56 CREATE UNIQUE INDEX emailuniqueindex_Basic ON Basic (email);
57
58 DROP TABLE Another;
59
60 CREATE TABLE Another (
61   id INTEGER PRIMARY KEY NOT NULL
62 );
63
64 DROP VIEW IF EXISTS email_list;
65 CREATE VIEW email_list AS
66     SELECT email FROM Basic WHERE email IS NOT NULL;
67
68 COMMIT;
69 SQL
70
71 # Test in list context
72 my @sql = $sqlt->translate(
73     from     => 'XML-SQLFairy',
74     to       => 'SQLite',
75     filename => $xmlfile,
76 ) or die $sqlt->error;
77
78 is_deeply(\@sql, 
79           [
80           'BEGIN TRANSACTION',
81           'DROP TABLE Basic',
82           'CREATE TABLE Basic (
83   id INTEGER PRIMARY KEY NOT NULL,
84   title varchar(100) NOT NULL DEFAULT \'hello\',
85   description text DEFAULT \'\',
86   email varchar(255),
87   explicitnulldef varchar,
88   explicitemptystring varchar DEFAULT \'\',
89   -- Hello emptytagdef
90   emptytagdef varchar DEFAULT \'\',
91   another_id int(10) DEFAULT \'2\',
92   timest timestamp
93 )',
94           'CREATE INDEX titleindex_Basic02 ON Basic (title)',
95           'CREATE UNIQUE INDEX emailuniqueindex_Basic02 ON Basic (email)',
96           'DROP TABLE Another',
97           'CREATE TABLE Another (
98   id INTEGER PRIMARY KEY NOT NULL
99 )',
100           'DROP VIEW IF EXISTS email_list;
101 CREATE VIEW email_list AS
102     SELECT email FROM Basic WHERE email IS NOT NULL',
103           'COMMIT'
104           ], 'SQLite translate in list context matches');
105
106