All Schema objects now have an extra attribute. Added parsing support (and
[dbsrgits/SQL-Translator.git] / t / 28xml-xmi-parser-sqlfairy.t
CommitLineData
f992cfaa 1#!/usr/bin/perl -w
55e462b4 2# vim:filetype=perl
3
4# Before `make install' is performed this script should be runnable with
5# `make test'. After `make install' it should work as `perl test.pl'
6
7use strict;
8use FindBin qw/$Bin/;
9use Data::Dumper;
10
11# run with -d for debug
12my %opt;
13BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; }
14use constant DEBUG => (exists $opt{d} ? 1 : 0);
15
16use Test::More;
090d438c 17use Test::SQL::Translator;
55e462b4 18use SQL::Translator;
19use SQL::Translator::Schema::Constants;
20
55e462b4 21# Testing 1,2,3,..
22#=============================================================================
23
2d691ec1 24BEGIN {
b1789409 25 maybe_plan(335,
2d691ec1 26 'SQL::Translator::Parser::XML::XMI::SQLFairy',
27 'SQL::Translator::Producer::MySQL');
28}
55e462b4 29
30my $testschema = "$Bin/data/xmi/OrderDB.sqlfairy.poseidon2.xmi";
31die "Can't find test schema $testschema" unless -e $testschema;
32
33my $obj;
34$obj = SQL::Translator->new(
35 filename => $testschema,
36 from => 'XML-XMI-SQLFairy',
37 to => 'MySQL',
38 debug => DEBUG,
39 show_warnings => 1,
40);
41my $sql = $obj->translate;
42ok( $sql, "Got some SQL");
43print $sql if DEBUG;
090d438c 44print "Translator:",Dumper($obj) if DEBUG;
55e462b4 45
46
47#
48# Test the schema
49#
50my $scma = $obj->schema;
51is( $scma->is_valid, 1, 'Schema is valid' );
52my @tblnames = map {$_->name} $scma->get_tables;
53is(scalar(@{$scma->get_tables}), scalar(@tblnames), "Right number of tables");
ae15bb99 54is_deeply( \@tblnames,
55 [qw/Order OrderLine Customer ContactDetails ContactDetails_Customer/]
56,"tables");
55e462b4 57
090d438c 58table_ok( $scma->get_table("Customer"), {
55e462b4 59 name => "Customer",
60 fields => [
61 {
55e462b4 62 name => "name",
63 data_type => "VARCHAR",
090d438c 64 size => 255,
55e462b4 65 default_value => undef,
66 is_nullable => 0,
67 is_primary_key => 0,
68 },
69 {
70 name => "email",
71 data_type => "VARCHAR",
090d438c 72 size => 255,
55e462b4 73 default_value => undef,
74 is_nullable => 1,
75 is_primary_key => 0,
76 },
f992cfaa 77 {
78 name => "CustomerID",
79 data_type => "INT",
090d438c 80 size => 10,
f992cfaa 81 default_value => undef,
82 is_nullable => 0,
83 is_primary_key => 1,
090d438c 84 is_auto_increment => 1,
f992cfaa 85 },
55e462b4 86 ],
090d438c 87 constraints => [
88 {
89 type => "PRIMARY KEY",
90 fields => ["CustomerID"],
91 },
55e462b4 92 #{
090d438c 93 # name => "UniqueEmail",
94 # type => "UNIQUE",
95 # fields => ["email"],
96 #},
97 ],
98});
55e462b4 99
090d438c 100table_ok( $scma->get_table("ContactDetails_Customer"), {
ae15bb99 101 name => "ContactDetails_Customer",
102 fields => [
103 {
104 name => "ContactDetailsID",
105 data_type => "INT",
090d438c 106 size => 10,
ae15bb99 107 default_value => undef,
108 is_nullable => 0,
109 is_primary_key => 1,
110 is_auto_increment => 0,
090d438c 111 is_foreign_key => 1,
ae15bb99 112 },
113 {
114 name => "CustomerID",
115 data_type => "INT",
090d438c 116 size => 10,
ae15bb99 117 default_value => undef,
118 is_nullable => 0,
119 is_primary_key => 1,
120 is_auto_increment => 0,
090d438c 121 is_foreign_key => 1,
ae15bb99 122 },
123 ],
090d438c 124 constraints => [
125 {
126 type => "FOREIGN KEY",
127 fields => ["ContactDetailsID"],
128 reference_table => "ContactDetails",
129 reference_fields => ["ContactDetailsID"],
130 },
131 {
132 type => "FOREIGN KEY",
133 fields => ["CustomerID"],
134 reference_table => "Customer",
135 reference_fields => ["CustomerID"],
136 },
137 {
138 type => "PRIMARY KEY",
139 fields => ["ContactDetailsID","CustomerID"],
140 },
141 ],
142});
ae15bb99 143
090d438c 144table_ok( $scma->get_table("ContactDetails"), {
ae15bb99 145 name => "ContactDetails",
146 fields => [
147 {
148 name => "address",
149 data_type => "VARCHAR",
150 size => "255",
151 default_value => undef,
152 is_nullable => 1,
153 is_primary_key => 0,
154 },
155 {
156 name => "telephone",
157 data_type => "VARCHAR",
158 size => "255",
159 default_value => undef,
160 is_nullable => 1,
161 is_primary_key => 0,
162 },
163 {
164 name => "ContactDetailsID",
165 data_type => "INT",
090d438c 166 size => 10,
ae15bb99 167 default_value => undef,
168 is_nullable => 0,
169 is_primary_key => 1,
170 is_auto_increment => 1,
171 },
172 ],
090d438c 173 constraints => [
174 {
175 type => "PRIMARY KEY",
176 fields => ["ContactDetailsID"],
177 },
178 ],
179});
ae15bb99 180
090d438c 181table_ok( $scma->get_table("Order"), {
55e462b4 182 name => "Order",
183 fields => [
184 {
f992cfaa 185 name => "invoiceNumber",
186 data_type => "INT",
090d438c 187 size => 10,
55e462b4 188 default_value => undef,
189 is_nullable => 0,
f992cfaa 190 is_primary_key => 1,
090d438c 191 is_auto_increment => 1,
55e462b4 192 },
193 {
f992cfaa 194 name => "orderDate",
195 data_type => "DATE",
55e462b4 196 default_value => undef,
197 is_nullable => 0,
f992cfaa 198 is_primary_key => 0,
55e462b4 199 },
200 {
f992cfaa 201 name => "CustomerID",
55e462b4 202 data_type => "INT",
090d438c 203 size => 10,
55e462b4 204 default_value => undef,
205 is_nullable => 0,
206 is_primary_key => 0,
207 is_foreign_key => 1,
208 },
209 ],
090d438c 210 constraints => [
211 {
212 type => "PRIMARY KEY",
213 fields => ["invoiceNumber"],
214 },
215 {
216 type => "FOREIGN KEY",
217 fields => ["CustomerID"],
218 reference_table => "Customer",
219 reference_fields => ["CustomerID"],
220 },
221 ],
222 # TODO
223 #indexes => [
224 # {
225 # name => "idxOrderDate",
226 # type => "INDEX",
227 # fields => ["orderDate"],
228 # },
229 #],
230});
231
232
233table_ok( $scma->get_table("OrderLine"), {
55e462b4 234 name => "OrderLine",
235 fields => [
236 {
237 name => "lineNumber",
238 data_type => "INT",
090d438c 239 size => 255,
55e462b4 240 default_value => 1,
241 is_nullable => 0,
f992cfaa 242 is_primary_key => 0,
55e462b4 243 },
244 {
245 name => "quantity",
246 data_type => "INT",
090d438c 247 size => 255,
55e462b4 248 default_value => 1,
249 is_nullable => 0,
250 is_primary_key => 0,
251 },
252 {
f992cfaa 253 name => "OrderLineID",
254 data_type => "INT",
090d438c 255 size => 10,
f992cfaa 256 default_value => undef,
257 is_nullable => 0,
258 is_primary_key => 1,
090d438c 259 is_auto_increment => 1,
f992cfaa 260 },
261 {
262 name => "invoiceNumber",
55e462b4 263 data_type => "INT",
090d438c 264 size => 10,
55e462b4 265 default_value => undef,
266 is_nullable => 1,
f992cfaa 267 is_primary_key => 1,
55e462b4 268 },
269 ],
090d438c 270 constraints => [
271 {
272 type => "PRIMARY KEY",
273 fields => ["OrderLineID","invoiceNumber"],
274 },
275 {
276 type => "FOREIGN KEY",
277 fields => ["invoiceNumber"],
278 reference_table => "Order",
279 reference_fields => ["invoiceNumber"],
280 },
281 ],
282});