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'
11 # run with -d for debug
13 BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; }
14 use constant DEBUG => (exists $opt{d} ? 1 : 0);
17 use Test::SQL::Translator;
19 use SQL::Translator::Schema::Constants;
22 #=============================================================================
26 'SQL::Translator::Parser::XML::XMI::SQLFairy',
27 'SQL::Translator::Producer::MySQL');
30 my $testschema = "$Bin/data/xmi/OrderDB.sqlfairy.poseidon2.xmi";
31 die "Can't find test schema $testschema" unless -e $testschema;
34 $obj = SQL::Translator->new(
35 filename => $testschema,
36 from => 'XML-XMI-SQLFairy',
41 my $sql = $obj->translate;
42 ok( $sql, "Got some SQL");
44 print "Translator:",Dumper($obj) if DEBUG;
50 my $scma = $obj->schema;
51 is( $scma->is_valid, 1, 'Schema is valid' );
52 my @tblnames = map {$_->name} $scma->get_tables;
53 is(scalar(@{$scma->get_tables}), scalar(@tblnames), "Right number of tables");
54 is_deeply( \@tblnames,
55 [qw/Order OrderLine Customer ContactDetails ContactDetails_Customer/]
58 table_ok( $scma->get_table("Customer"), {
61 mysql_table_type => 'InnoDB'
66 data_type => "VARCHAR",
68 default_value => undef,
74 data_type => "VARCHAR",
76 default_value => undef,
84 default_value => undef,
87 is_auto_increment => 1,
92 type => "PRIMARY KEY",
93 fields => ["CustomerID"],
96 # name => "UniqueEmail",
98 # fields => ["email"],
103 table_ok( $scma->get_table("ContactDetails_Customer"), {
104 name => "ContactDetails_Customer",
106 mysql_table_type => 'InnoDB'
110 name => "ContactDetailsID",
113 default_value => undef,
116 is_auto_increment => 0,
120 name => "CustomerID",
123 default_value => undef,
126 is_auto_increment => 0,
132 type => "FOREIGN KEY",
133 fields => ["ContactDetailsID"],
134 reference_table => "ContactDetails",
135 reference_fields => ["ContactDetailsID"],
138 type => "FOREIGN KEY",
139 fields => ["CustomerID"],
140 reference_table => "Customer",
141 reference_fields => ["CustomerID"],
144 type => "PRIMARY KEY",
145 fields => ["ContactDetailsID","CustomerID"],
150 table_ok( $scma->get_table("ContactDetails"), {
151 name => "ContactDetails",
153 mysql_table_type => 'InnoDB'
158 data_type => "VARCHAR",
160 default_value => undef,
166 data_type => "VARCHAR",
168 default_value => undef,
173 name => "ContactDetailsID",
176 default_value => undef,
179 is_auto_increment => 1,
184 type => "PRIMARY KEY",
185 fields => ["ContactDetailsID"],
190 table_ok( $scma->get_table("Order"), {
193 mysql_table_type => 'InnoDB'
197 name => "invoiceNumber",
200 default_value => undef,
203 is_auto_increment => 1,
208 default_value => undef,
213 name => "CustomerID",
216 default_value => undef,
224 type => "PRIMARY KEY",
225 fields => ["invoiceNumber"],
228 type => "FOREIGN KEY",
229 fields => ["CustomerID"],
230 reference_table => "Customer",
231 reference_fields => ["CustomerID"],
237 # name => "idxOrderDate",
239 # fields => ["orderDate"],
245 table_ok( $scma->get_table("OrderLine"), {
248 mysql_table_type => 'InnoDB'
252 name => "lineNumber",
268 name => "OrderLineID",
271 default_value => undef,
274 is_auto_increment => 1,
277 name => "invoiceNumber",
280 default_value => undef,
287 type => "PRIMARY KEY",
288 fields => ["OrderLineID","invoiceNumber"],
291 type => "FOREIGN KEY",
292 fields => ["invoiceNumber"],
293 reference_table => "Order",
294 reference_fields => ["invoiceNumber"],