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'
12 use Test::SQL::Translator qw(maybe_plan);
16 BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; }
17 use constant DEBUG => (exists $opt{d} ? 1 : 0);
18 use constant TRACE => (exists $opt{t} ? 1 : 0);
22 my $file = "$Bin/data/mysql/sqlfxml-producer-basic.sql";
24 local $SIG{__WARN__} = sub {
26 unless $_[0] =~ m!XML/Writer!;
30 #=============================================================================
36 'SQL::Translator::Producer::XML::SQLFairy');
39 use Test::Differences;
41 use SQL::Translator::Producer::XML::SQLFairy;
43 # Due to formatters being able to change style, e.g. by entries in .rc files
44 # in $HOME, the layout and or indent might differ slightly. As leading white
45 # is not important in XML, strip it when comparing
48 my ($got, $expect, $msg) = (@_, "XML looks right");
51 eq_or_diff $got, $expect, $msg, { context => 1 };
61 <schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
64 <table name="Basic" order="1">
67 <field name="id" data_type="integer" size="10" is_nullable="0" is_auto_increment="1" is_primary_key="1" is_foreign_key="0" order="1">
69 <comments>comment on id field</comments>
71 <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" order="2">
75 <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" order="3">
79 <field name="email" data_type="varchar" size="255" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" order="4">
85 <index name="titleindex" type="NORMAL" fields="title" options="">
90 <constraint name="" type="PRIMARY KEY" fields="id" reference_table="" reference_fields="" on_delete="" on_update="" match_type="" expression="" options="" deferrable="1">
93 <constraint name="" type="UNIQUE" fields="email" reference_table="" reference_fields="" on_delete="" on_update="" match_type="" expression="" options="" deferrable="1">
101 <triggers></triggers>
102 <procedures></procedures>
106 $obj = SQL::Translator->new(
112 to => "XML-SQLFairy",
114 $xml = $obj->translate($file) or die $obj->error;
115 ok("$xml" ne "" ,"Produced something!");
116 print "XML:\n$xml" if DEBUG;
117 # Strip sqlf header with its variable date so we diff safely
118 $xml =~ s/^([^\n]*\n){7}//m;
119 xml_equals $xml, $ans;
126 # Thanks to Ken for the schema setup lifted from 13schema.t
131 <schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
135 <view name="foo_view" fields="name,age" order="1">
136 <sql>select name, age from person</sql>
137 <extra hello="world" />
140 <triggers></triggers>
141 <procedures></procedures>
145 $obj = SQL::Translator->new(
151 to => "XML-SQLFairy",
153 my $s = $obj->schema;
154 my $name = 'foo_view';
155 my $sql = 'select name, age from person';
156 my $fields = 'name, age';
157 my $v = $s->add_view(
161 extra => { hello => "world" },
165 # As we have created a Schema we give translate a dummy string so that
166 # it will run the produce.
167 lives_ok {$xml =$obj->translate("FOO");} "Translate (View) ran";
168 ok("$xml" ne "" ,"Produced something!");
169 print "XML attrib_values=>1:\n$xml" if DEBUG;
170 # Strip sqlf header with its variable date so we diff safely
171 $xml =~ s/^([^\n]*\n){7}//m;
172 xml_equals $xml, $ans;
178 # Thanks to Ken for the schema setup lifted from 13schema.t
183 <schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
186 <table name="Basic" order="1">
190 <constraints></constraints>
191 <comments></comments>
196 <trigger name="foo_trigger" database_events="insert" on_table="Basic" perform_action_when="after" order="1" scope="row">
197 <action>update modified=timestamp();</action>
198 <extra hello="world" />
201 <procedures></procedures>
205 $obj = SQL::Translator->new(
211 to => "XML-SQLFairy",
213 my $s = $obj->schema;
214 my $name = 'foo_trigger';
215 my $perform_action_when = 'after';
216 my $database_event = 'insert';
217 my $action = 'update modified=timestamp();';
218 my $table = $s->add_table( name => "Basic" ) or die $s->error;
219 my $t = $s->add_trigger(
221 perform_action_when => $perform_action_when,
222 database_events => [$database_event],
226 extra => { hello => "world" },
229 # As we have created a Schema we give translate a dummy string so that
230 # it will run the produce.
231 lives_ok {$xml =$obj->translate("FOO");} "Translate (Trigger) ran";
232 ok("$xml" ne "" ,"Produced something!");
233 print "XML attrib_values=>1:\n$xml" if DEBUG;
234 # Strip sqlf header with its variable date so we diff safely
235 $xml =~ s/^([^\n]*\n){7}//m;
236 xml_equals $xml, $ans;
242 # Thanks to Ken for the schema setup lifted from 13schema.t
247 <schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
251 <triggers></triggers>
253 <procedure name="foo_proc" parameters="foo,bar" owner="Nomar" order="1">
254 <sql>select foo from bar</sql>
255 <comments>Go Sox!</comments>
256 <extra hello="world" />
262 $obj = SQL::Translator->new(
268 to => "XML-SQLFairy",
270 my $s = $obj->schema;
271 my $name = 'foo_proc';
272 my $sql = 'select foo from bar';
273 my $parameters = 'foo, bar';
275 my $comments = 'Go Sox!';
276 my $p = $s->add_procedure(
279 parameters => $parameters,
281 comments => $comments,
282 extra => { hello => "world" },
285 # As we have created a Schema we give translate a dummy string so that
286 # it will run the produce.
287 lives_ok {$xml =$obj->translate("FOO");} "Translate (Procedure) ran";
288 ok("$xml" ne "" ,"Produced something!");
289 print "XML attrib_values=>1:\n$xml" if DEBUG;
290 # Strip sqlf header with its variable date so we diff safely
291 $xml =~ s/^([^\n]*\n){7}//m;
292 xml_equals $xml, $ans;
302 <schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
305 <table name="Basic" order="1">
308 <field name="foo" data_type="integer" size="10" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" order="1">
309 <extra ZEROFILL="1" />
310 <comments></comments>
312 <field name="bar" data_type="numeric" size="10,2" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" order="2">
314 <comments></comments>
316 <field name="baz" data_type="decimal" size="8,3" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" order="3">
318 <comments></comments>
322 <constraints></constraints>
323 <comments></comments>
327 <triggers></triggers>
328 <procedures></procedures>
332 $obj = SQL::Translator->new(
338 to => "XML-SQLFairy",
340 my $s = $obj->schema;
341 my $t = $s->add_table( name => "Basic" ) or die $s->error;
342 my $f = $t->add_field(
344 data_type => "integer",
347 $f->extra(ZEROFILL => "1");
351 data_type => "numeric",
356 data_type => "decimal",
361 # As we have created a Schema we give translate a dummy string so that
362 # it will run the produce.
363 lives_ok {$xml =$obj->translate("FOO");} "Translate (Field.extra) ran";
364 ok("$xml" ne "" ,"Produced something!");
365 print "XML:\n$xml" if DEBUG;
366 # Strip sqlf header with its variable date so we diff safely
367 $xml =~ s/^([^\n]*\n){7}//m;
368 xml_equals $xml, $ans;