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'
15 BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; }
16 use constant DEBUG => (exists $opt{d} ? 1 : 0);
17 use constant TRACE => (exists $opt{t} ? 1 : 0);
21 my $file = "$Bin/data/mysql/sqlfxml-producer-basic.sql";
23 local $SIG{__WARN__} = sub {
25 unless $_[0] =~ m#XML/Writer#;
29 #=============================================================================
31 eval { require XML::Writer; };
32 if ($@ && $@ =~ m!locate XML::Writer.pm in!) {
33 plan skip_all => "You need XML::Writer to use XML::SQLFairy.";
35 eval { require Test::Differences; };
36 if ($@ && $@ =~ m!locate Test/Differences.pm in!) {
37 plan skip_all => "You need Test::Differences for this test.";
39 use Test::Differences;
43 use SQL::Translator::Producer::XML::SQLFairy;
46 # emit_empty_tags => 0
52 <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
53 <sqlt:name></sqlt:name>
54 <sqlt:database></sqlt:database>
56 <sqlt:name>Basic</sqlt:name>
57 <sqlt:order>1</sqlt:order>
60 <sqlt:name>id</sqlt:name>
61 <sqlt:data_type>integer</sqlt:data_type>
62 <sqlt:size>10</sqlt:size>
63 <sqlt:is_nullable>0</sqlt:is_nullable>
64 <sqlt:is_auto_increment>1</sqlt:is_auto_increment>
65 <sqlt:is_primary_key>1</sqlt:is_primary_key>
66 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
67 <sqlt:comments>comment on id field</sqlt:comments>
68 <sqlt:order>1</sqlt:order>
71 <sqlt:name>title</sqlt:name>
72 <sqlt:data_type>varchar</sqlt:data_type>
73 <sqlt:size>100</sqlt:size>
74 <sqlt:is_nullable>0</sqlt:is_nullable>
75 <sqlt:default_value>hello</sqlt:default_value>
76 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
77 <sqlt:is_primary_key>0</sqlt:is_primary_key>
78 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
79 <sqlt:comments></sqlt:comments>
80 <sqlt:order>2</sqlt:order>
83 <sqlt:name>description</sqlt:name>
84 <sqlt:data_type>text</sqlt:data_type>
85 <sqlt:size>65535</sqlt:size>
86 <sqlt:is_nullable>1</sqlt:is_nullable>
87 <sqlt:default_value></sqlt:default_value>
88 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
89 <sqlt:is_primary_key>0</sqlt:is_primary_key>
90 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
91 <sqlt:comments></sqlt:comments>
92 <sqlt:order>3</sqlt:order>
95 <sqlt:name>email</sqlt:name>
96 <sqlt:data_type>varchar</sqlt:data_type>
97 <sqlt:size>255</sqlt:size>
98 <sqlt:is_nullable>1</sqlt:is_nullable>
99 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
100 <sqlt:is_primary_key>0</sqlt:is_primary_key>
101 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
102 <sqlt:comments></sqlt:comments>
103 <sqlt:order>4</sqlt:order>
108 <sqlt:name>titleindex</sqlt:name>
109 <sqlt:type>NORMAL</sqlt:type>
110 <sqlt:fields>title</sqlt:fields>
111 <sqlt:options></sqlt:options>
116 <sqlt:name></sqlt:name>
117 <sqlt:type>PRIMARY KEY</sqlt:type>
118 <sqlt:fields>id</sqlt:fields>
119 <sqlt:reference_table></sqlt:reference_table>
120 <sqlt:reference_fields></sqlt:reference_fields>
121 <sqlt:on_delete></sqlt:on_delete>
122 <sqlt:on_update></sqlt:on_update>
123 <sqlt:match_type></sqlt:match_type>
124 <sqlt:expression></sqlt:expression>
125 <sqlt:options></sqlt:options>
126 <sqlt:deferrable>1</sqlt:deferrable>
129 <sqlt:name></sqlt:name>
130 <sqlt:type>UNIQUE</sqlt:type>
131 <sqlt:fields>email</sqlt:fields>
132 <sqlt:reference_table></sqlt:reference_table>
133 <sqlt:reference_fields></sqlt:reference_fields>
134 <sqlt:on_delete></sqlt:on_delete>
135 <sqlt:on_update></sqlt:on_update>
136 <sqlt:match_type></sqlt:match_type>
137 <sqlt:expression></sqlt:expression>
138 <sqlt:options></sqlt:options>
139 <sqlt:deferrable>1</sqlt:deferrable>
146 $obj = SQL::Translator->new(
152 to => 'XML-SQLFairy',
154 lives_ok {$xml = $obj->translate($file);} "Translate (emit_empty_tags=>0) ran";
155 ok("$xml" ne "" ,"Produced something!");
156 print "XML:\n$xml" if DEBUG;
157 # Strip sqlf header with its variable date so we diff safely
158 $xml =~ s/^([^\n]*\n){7}//m;
159 eq_or_diff $xml, $ans ,"XML looks right";
161 } # end emit_empty_tags=>0
164 # emit_empty_tags => 1
170 <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
171 <sqlt:name></sqlt:name>
172 <sqlt:database></sqlt:database>
174 <sqlt:name>Basic</sqlt:name>
175 <sqlt:order>2</sqlt:order>
178 <sqlt:name>id</sqlt:name>
179 <sqlt:data_type>integer</sqlt:data_type>
180 <sqlt:size>10</sqlt:size>
181 <sqlt:is_nullable>0</sqlt:is_nullable>
182 <sqlt:default_value></sqlt:default_value>
183 <sqlt:is_auto_increment>1</sqlt:is_auto_increment>
184 <sqlt:is_primary_key>1</sqlt:is_primary_key>
185 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
186 <sqlt:comments>comment on id field</sqlt:comments>
187 <sqlt:order>5</sqlt:order>
190 <sqlt:name>title</sqlt:name>
191 <sqlt:data_type>varchar</sqlt:data_type>
192 <sqlt:size>100</sqlt:size>
193 <sqlt:is_nullable>0</sqlt:is_nullable>
194 <sqlt:default_value>hello</sqlt:default_value>
195 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
196 <sqlt:is_primary_key>0</sqlt:is_primary_key>
197 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
198 <sqlt:comments></sqlt:comments>
199 <sqlt:order>6</sqlt:order>
202 <sqlt:name>description</sqlt:name>
203 <sqlt:data_type>text</sqlt:data_type>
204 <sqlt:size>65535</sqlt:size>
205 <sqlt:is_nullable>1</sqlt:is_nullable>
206 <sqlt:default_value></sqlt:default_value>
207 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
208 <sqlt:is_primary_key>0</sqlt:is_primary_key>
209 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
210 <sqlt:comments></sqlt:comments>
211 <sqlt:order>7</sqlt:order>
214 <sqlt:name>email</sqlt:name>
215 <sqlt:data_type>varchar</sqlt:data_type>
216 <sqlt:size>255</sqlt:size>
217 <sqlt:is_nullable>1</sqlt:is_nullable>
218 <sqlt:default_value></sqlt:default_value>
219 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
220 <sqlt:is_primary_key>0</sqlt:is_primary_key>
221 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
222 <sqlt:comments></sqlt:comments>
223 <sqlt:order>8</sqlt:order>
228 <sqlt:name>titleindex</sqlt:name>
229 <sqlt:type>NORMAL</sqlt:type>
230 <sqlt:fields>title</sqlt:fields>
231 <sqlt:options></sqlt:options>
236 <sqlt:name></sqlt:name>
237 <sqlt:type>PRIMARY KEY</sqlt:type>
238 <sqlt:fields>id</sqlt:fields>
239 <sqlt:reference_table></sqlt:reference_table>
240 <sqlt:reference_fields></sqlt:reference_fields>
241 <sqlt:on_delete></sqlt:on_delete>
242 <sqlt:on_update></sqlt:on_update>
243 <sqlt:match_type></sqlt:match_type>
244 <sqlt:expression></sqlt:expression>
245 <sqlt:options></sqlt:options>
246 <sqlt:deferrable>1</sqlt:deferrable>
249 <sqlt:name></sqlt:name>
250 <sqlt:type>UNIQUE</sqlt:type>
251 <sqlt:fields>email</sqlt:fields>
252 <sqlt:reference_table></sqlt:reference_table>
253 <sqlt:reference_fields></sqlt:reference_fields>
254 <sqlt:on_delete></sqlt:on_delete>
255 <sqlt:on_update></sqlt:on_update>
256 <sqlt:match_type></sqlt:match_type>
257 <sqlt:expression></sqlt:expression>
258 <sqlt:options></sqlt:options>
259 <sqlt:deferrable>1</sqlt:deferrable>
266 $obj = SQL::Translator->new(
272 to => 'XML-SQLFairy',
273 producer_args => { emit_empty_tags => 1 },
275 lives_ok { $xml=$obj->translate($file); } "Translate (emit_empty_tags=>1) ran";
276 ok("$xml" ne "" ,"Produced something!");
277 print "XML emit_empty_tags=>1:\n$xml" if DEBUG;
278 # Strip sqlf header with its variable date so we diff safely
279 $xml =~ s/^([^\n]*\n){7}//m;
280 eq_or_diff $xml, $ans ,"XML looks right";
282 } # end emit_empty_tags => 1
291 <sqlt:schema name="" database="" xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
292 <sqlt:table name="Basic" order="3">
294 <sqlt:field name="id" data_type="integer" size="10" is_nullable="0" is_auto_increment="1" is_primary_key="1" is_foreign_key="0" comments="comment on id field" order="9" />
295 <sqlt:field name="title" data_type="varchar" size="100" is_nullable="0" default_value="hello" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" comments="" order="10" />
296 <sqlt:field name="description" data_type="text" size="65535" is_nullable="1" default_value="" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" comments="" order="11" />
297 <sqlt:field name="email" data_type="varchar" size="255" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" comments="" order="12" />
300 <sqlt:index name="titleindex" type="NORMAL" fields="title" options="" />
303 <sqlt:constraint name="" type="PRIMARY KEY" fields="id" reference_table="" reference_fields="" on_delete="" on_update="" match_type="" expression="" options="" deferrable="1" />
304 <sqlt:constraint name="" type="UNIQUE" fields="email" reference_table="" reference_fields="" on_delete="" on_update="" match_type="" expression="" options="" deferrable="1" />
310 $obj = SQL::Translator->new(
316 to => "XML-SQLFairy",
317 producer_args => { attrib_values => 1 },
319 lives_ok {$xml = $obj->translate($file);} "Translate (attrib_values=>1) ran";
320 ok("$xml" ne "" ,"Produced something!");
321 print "XML attrib_values=>1:\n$xml" if DEBUG;
322 # Strip sqlf header with its variable date so we diff safely
323 $xml =~ s/^([^\n]*\n){7}//m;
324 eq_or_diff $xml, $ans ,"XML looks right";
326 } # end attrib_values => 1
331 # Thanks to Ken for the schema setup lifted from 13schema.t
336 <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
337 <sqlt:name></sqlt:name>
338 <sqlt:database></sqlt:database>
340 <sqlt:name>foo_view</sqlt:name>
341 <sqlt:sql>select name, age from person</sqlt:sql>
342 <sqlt:fields>name,age</sqlt:fields>
343 <sqlt:order>1</sqlt:order>
348 $obj = SQL::Translator->new(
354 to => "XML-SQLFairy",
356 my $s = $obj->schema;
357 my $name = 'foo_view';
358 my $sql = 'select name, age from person';
359 my $fields = 'name, age';
360 my $v = $s->add_view(
367 # As we have created a Schema we give translate a dummy string so that
368 # it will run the produce.
369 lives_ok {$xml =$obj->translate("FOO");} "Translate (View) ran";
370 ok("$xml" ne "" ,"Produced something!");
371 print "XML attrib_values=>1:\n$xml" if DEBUG;
372 # Strip sqlf header with its variable date so we diff safely
373 $xml =~ s/^([^\n]*\n){7}//m;
374 eq_or_diff $xml, $ans ,"XML looks right";
380 # Thanks to Ken for the schema setup lifted from 13schema.t
385 <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
386 <sqlt:name></sqlt:name>
387 <sqlt:database></sqlt:database>
389 <sqlt:name>foo_trigger</sqlt:name>
390 <sqlt:database_event>insert</sqlt:database_event>
391 <sqlt:action>update modified=timestamp();</sqlt:action>
392 <sqlt:on_table>foo</sqlt:on_table>
393 <sqlt:perform_action_when>after</sqlt:perform_action_when>
394 <sqlt:order>1</sqlt:order>
399 $obj = SQL::Translator->new(
405 to => "XML-SQLFairy",
407 my $s = $obj->schema;
408 my $name = 'foo_trigger';
409 my $perform_action_when = 'after';
410 my $database_event = 'insert';
411 my $on_table = 'foo';
412 my $action = 'update modified=timestamp();';
413 my $t = $s->add_trigger(
415 perform_action_when => $perform_action_when,
416 database_event => $database_event,
417 on_table => $on_table,
421 # As we have created a Schema we give translate a dummy string so that
422 # it will run the produce.
423 lives_ok {$xml =$obj->translate("FOO");} "Translate (Trigger) ran";
424 ok("$xml" ne "" ,"Produced something!");
425 print "XML attrib_values=>1:\n$xml" if DEBUG;
426 # Strip sqlf header with its variable date so we diff safely
427 $xml =~ s/^([^\n]*\n){7}//m;
428 eq_or_diff $xml, $ans ,"XML looks right";
434 # Thanks to Ken for the schema setup lifted from 13schema.t
439 <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
440 <sqlt:name></sqlt:name>
441 <sqlt:database></sqlt:database>
443 <sqlt:name>foo_proc</sqlt:name>
444 <sqlt:sql>select foo from bar</sqlt:sql>
445 <sqlt:parameters>foo,bar</sqlt:parameters>
446 <sqlt:owner>Nomar</sqlt:owner>
447 <sqlt:comments>Go Sox!</sqlt:comments>
448 <sqlt:order>1</sqlt:order>
453 $obj = SQL::Translator->new(
459 to => "XML-SQLFairy",
461 my $s = $obj->schema;
462 my $name = 'foo_proc';
463 my $sql = 'select foo from bar';
464 my $parameters = 'foo, bar';
466 my $comments = 'Go Sox!';
467 my $p = $s->add_procedure(
470 parameters => $parameters,
472 comments => $comments,
475 # As we have created a Schema we give translate a dummy string so that
476 # it will run the produce.
477 lives_ok {$xml =$obj->translate("FOO");} "Translate (Procedure) ran";
478 ok("$xml" ne "" ,"Produced something!");
479 print "XML attrib_values=>1:\n$xml" if DEBUG;
480 # Strip sqlf header with its variable date so we diff safely
481 $xml =~ s/^([^\n]*\n){7}//m;
482 eq_or_diff $xml, $ans ,"XML looks right";