Commit | Line | Data |
d0c12b9f |
1 | #!/usr/bin/perl -w |
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 | |
1ea530d4 |
7 | local $^W = 0; |
8 | |
d0c12b9f |
9 | use strict; |
10 | use Test::More; |
11 | use Test::Exception; |
12 | |
13 | use Data::Dumper; |
2e11379e |
14 | my %opt; |
d0c12b9f |
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); |
18 | |
19 | use FindBin qw/$Bin/; |
20 | |
21 | my $file = "$Bin/data/mysql/sqlfxml-producer-basic.sql"; |
22 | |
fbc0552f |
23 | local $SIG{__WARN__} = sub { |
24 | CORE::warn(@_) |
25 | unless $_[0] =~ m#XML/Writer#; |
26 | }; |
d0c12b9f |
27 | |
28 | # Testing 1,2,3,4... |
29 | #============================================================================= |
30 | |
31 | eval { require XML::Writer; }; |
32 | if ($@ && $@ =~ m!locate XML::Writer.pm in!) { |
ac62dff1 |
33 | plan skip_all => "You need XML::Writer to use XML::SQLFairy."; |
d0c12b9f |
34 | } |
35 | eval { require Test::Differences; }; |
36 | if ($@ && $@ =~ m!locate Test/Differences.pm in!) { |
37 | plan skip_all => "You need Test::Differences for this test."; |
38 | } |
39 | use Test::Differences; |
1e3867bf |
40 | plan tests => 18; |
d3422086 |
41 | |
d0c12b9f |
42 | use SQL::Translator; |
ac62dff1 |
43 | use SQL::Translator::Producer::XML::SQLFairy; |
d0c12b9f |
44 | |
d0c12b9f |
45 | # |
46 | # emit_empty_tags => 0 |
47 | # |
1e3867bf |
48 | { |
49 | my ($obj,$ans,$xml); |
d0c12b9f |
50 | |
51 | $ans = <<EOXML; |
52 | <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml"> |
3b80481c |
53 | <sqlt:name></sqlt:name> |
d3422086 |
54 | <sqlt:database></sqlt:database> |
d0c12b9f |
55 | <sqlt:table> |
56 | <sqlt:name>Basic</sqlt:name> |
57 | <sqlt:order>1</sqlt:order> |
58 | <sqlt:fields> |
59 | <sqlt:field> |
d3422086 |
60 | <sqlt:name>id</sqlt:name> |
d0c12b9f |
61 | <sqlt:data_type>integer</sqlt:data_type> |
d3422086 |
62 | <sqlt:size>10</sqlt:size> |
3b80481c |
63 | <sqlt:is_nullable>0</sqlt:is_nullable> |
d3422086 |
64 | <sqlt:is_auto_increment>1</sqlt:is_auto_increment> |
3b80481c |
65 | <sqlt:is_primary_key>1</sqlt:is_primary_key> |
d3422086 |
66 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
67 | <sqlt:comments>comment on id field</sqlt:comments> |
d0c12b9f |
68 | <sqlt:order>1</sqlt:order> |
d0c12b9f |
69 | </sqlt:field> |
70 | <sqlt:field> |
d3422086 |
71 | <sqlt:name>title</sqlt:name> |
d0c12b9f |
72 | <sqlt:data_type>varchar</sqlt:data_type> |
d3422086 |
73 | <sqlt:size>100</sqlt:size> |
74 | <sqlt:is_nullable>0</sqlt:is_nullable> |
d0c12b9f |
75 | <sqlt:default_value>hello</sqlt:default_value> |
76 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
3b80481c |
77 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
d3422086 |
78 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
79 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
80 | <sqlt:order>2</sqlt:order> |
d0c12b9f |
81 | </sqlt:field> |
82 | <sqlt:field> |
d3422086 |
83 | <sqlt:name>description</sqlt:name> |
d0c12b9f |
84 | <sqlt:data_type>text</sqlt:data_type> |
d3422086 |
85 | <sqlt:size>65535</sqlt:size> |
86 | <sqlt:is_nullable>1</sqlt:is_nullable> |
d0c12b9f |
87 | <sqlt:default_value></sqlt:default_value> |
88 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
3b80481c |
89 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
d3422086 |
90 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
91 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
92 | <sqlt:order>3</sqlt:order> |
d0c12b9f |
93 | </sqlt:field> |
94 | <sqlt:field> |
d3422086 |
95 | <sqlt:name>email</sqlt:name> |
d0c12b9f |
96 | <sqlt:data_type>varchar</sqlt:data_type> |
d3422086 |
97 | <sqlt:size>255</sqlt:size> |
3b80481c |
98 | <sqlt:is_nullable>1</sqlt:is_nullable> |
d3422086 |
99 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
3b80481c |
100 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
d3422086 |
101 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
102 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
103 | <sqlt:order>4</sqlt:order> |
d0c12b9f |
104 | </sqlt:field> |
105 | </sqlt:fields> |
106 | <sqlt:indices> |
107 | <sqlt:index> |
d0c12b9f |
108 | <sqlt:name>titleindex</sqlt:name> |
d0c12b9f |
109 | <sqlt:type>NORMAL</sqlt:type> |
d3422086 |
110 | <sqlt:fields>title</sqlt:fields> |
111 | <sqlt:options></sqlt:options> |
d0c12b9f |
112 | </sqlt:index> |
113 | </sqlt:indices> |
114 | <sqlt:constraints> |
115 | <sqlt:constraint> |
d0c12b9f |
116 | <sqlt:name></sqlt:name> |
d3422086 |
117 | <sqlt:type>PRIMARY KEY</sqlt:type> |
118 | <sqlt:fields>id</sqlt:fields> |
119 | <sqlt:reference_table></sqlt:reference_table> |
e6c155dd |
120 | <sqlt:reference_fields></sqlt:reference_fields> |
d0c12b9f |
121 | <sqlt:on_delete></sqlt:on_delete> |
122 | <sqlt:on_update></sqlt:on_update> |
d3422086 |
123 | <sqlt:match_type></sqlt:match_type> |
124 | <sqlt:expression></sqlt:expression> |
3b80481c |
125 | <sqlt:options></sqlt:options> |
d3422086 |
126 | <sqlt:deferrable>1</sqlt:deferrable> |
d0c12b9f |
127 | </sqlt:constraint> |
128 | <sqlt:constraint> |
d0c12b9f |
129 | <sqlt:name></sqlt:name> |
d3422086 |
130 | <sqlt:type>UNIQUE</sqlt:type> |
131 | <sqlt:fields>email</sqlt:fields> |
132 | <sqlt:reference_table></sqlt:reference_table> |
e6c155dd |
133 | <sqlt:reference_fields></sqlt:reference_fields> |
d0c12b9f |
134 | <sqlt:on_delete></sqlt:on_delete> |
135 | <sqlt:on_update></sqlt:on_update> |
d3422086 |
136 | <sqlt:match_type></sqlt:match_type> |
137 | <sqlt:expression></sqlt:expression> |
3b80481c |
138 | <sqlt:options></sqlt:options> |
d3422086 |
139 | <sqlt:deferrable>1</sqlt:deferrable> |
d0c12b9f |
140 | </sqlt:constraint> |
141 | </sqlt:constraints> |
142 | </sqlt:table> |
143 | </sqlt:schema> |
144 | EOXML |
145 | |
146 | $obj = SQL::Translator->new( |
147 | debug => DEBUG, |
148 | trace => TRACE, |
149 | show_warnings => 1, |
150 | add_drop_table => 1, |
ac62dff1 |
151 | from => 'MySQL', |
152 | to => 'XML-SQLFairy', |
d0c12b9f |
153 | ); |
f11724ad |
154 | lives_ok {$xml = $obj->translate($file);} "Translate (emit_empty_tags=>0) ran"; |
d0c12b9f |
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"; |
160 | |
1e3867bf |
161 | } # end emit_empty_tags=>0 |
162 | |
d0c12b9f |
163 | # |
164 | # emit_empty_tags => 1 |
165 | # |
1e3867bf |
166 | { |
167 | my ($obj,$ans,$xml); |
d0c12b9f |
168 | |
169 | $ans = <<EOXML; |
170 | <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml"> |
3b80481c |
171 | <sqlt:name></sqlt:name> |
d3422086 |
172 | <sqlt:database></sqlt:database> |
d0c12b9f |
173 | <sqlt:table> |
174 | <sqlt:name>Basic</sqlt:name> |
175 | <sqlt:order>2</sqlt:order> |
176 | <sqlt:fields> |
177 | <sqlt:field> |
d3422086 |
178 | <sqlt:name>id</sqlt:name> |
d0c12b9f |
179 | <sqlt:data_type>integer</sqlt:data_type> |
d3422086 |
180 | <sqlt:size>10</sqlt:size> |
181 | <sqlt:is_nullable>0</sqlt:is_nullable> |
d0c12b9f |
182 | <sqlt:default_value></sqlt:default_value> |
183 | <sqlt:is_auto_increment>1</sqlt:is_auto_increment> |
3b80481c |
184 | <sqlt:is_primary_key>1</sqlt:is_primary_key> |
d3422086 |
185 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
186 | <sqlt:comments>comment on id field</sqlt:comments> |
d0c12b9f |
187 | <sqlt:order>5</sqlt:order> |
d0c12b9f |
188 | </sqlt:field> |
189 | <sqlt:field> |
d3422086 |
190 | <sqlt:name>title</sqlt:name> |
d0c12b9f |
191 | <sqlt:data_type>varchar</sqlt:data_type> |
d3422086 |
192 | <sqlt:size>100</sqlt:size> |
193 | <sqlt:is_nullable>0</sqlt:is_nullable> |
d0c12b9f |
194 | <sqlt:default_value>hello</sqlt:default_value> |
195 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
3b80481c |
196 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
d3422086 |
197 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
198 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
199 | <sqlt:order>6</sqlt:order> |
d0c12b9f |
200 | </sqlt:field> |
201 | <sqlt:field> |
d3422086 |
202 | <sqlt:name>description</sqlt:name> |
d0c12b9f |
203 | <sqlt:data_type>text</sqlt:data_type> |
d3422086 |
204 | <sqlt:size>65535</sqlt:size> |
205 | <sqlt:is_nullable>1</sqlt:is_nullable> |
d0c12b9f |
206 | <sqlt:default_value></sqlt:default_value> |
207 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
3b80481c |
208 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
d3422086 |
209 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
210 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
211 | <sqlt:order>7</sqlt:order> |
d0c12b9f |
212 | </sqlt:field> |
213 | <sqlt:field> |
d3422086 |
214 | <sqlt:name>email</sqlt:name> |
d0c12b9f |
215 | <sqlt:data_type>varchar</sqlt:data_type> |
d3422086 |
216 | <sqlt:size>255</sqlt:size> |
217 | <sqlt:is_nullable>1</sqlt:is_nullable> |
d0c12b9f |
218 | <sqlt:default_value></sqlt:default_value> |
219 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
3b80481c |
220 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
d3422086 |
221 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
222 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
223 | <sqlt:order>8</sqlt:order> |
d0c12b9f |
224 | </sqlt:field> |
225 | </sqlt:fields> |
226 | <sqlt:indices> |
227 | <sqlt:index> |
d0c12b9f |
228 | <sqlt:name>titleindex</sqlt:name> |
d0c12b9f |
229 | <sqlt:type>NORMAL</sqlt:type> |
d3422086 |
230 | <sqlt:fields>title</sqlt:fields> |
231 | <sqlt:options></sqlt:options> |
d0c12b9f |
232 | </sqlt:index> |
233 | </sqlt:indices> |
234 | <sqlt:constraints> |
235 | <sqlt:constraint> |
d0c12b9f |
236 | <sqlt:name></sqlt:name> |
d3422086 |
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> |
d0c12b9f |
241 | <sqlt:on_delete></sqlt:on_delete> |
242 | <sqlt:on_update></sqlt:on_update> |
d3422086 |
243 | <sqlt:match_type></sqlt:match_type> |
244 | <sqlt:expression></sqlt:expression> |
3b80481c |
245 | <sqlt:options></sqlt:options> |
d3422086 |
246 | <sqlt:deferrable>1</sqlt:deferrable> |
d0c12b9f |
247 | </sqlt:constraint> |
248 | <sqlt:constraint> |
d0c12b9f |
249 | <sqlt:name></sqlt:name> |
d3422086 |
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> |
d0c12b9f |
254 | <sqlt:on_delete></sqlt:on_delete> |
255 | <sqlt:on_update></sqlt:on_update> |
d3422086 |
256 | <sqlt:match_type></sqlt:match_type> |
257 | <sqlt:expression></sqlt:expression> |
3b80481c |
258 | <sqlt:options></sqlt:options> |
d3422086 |
259 | <sqlt:deferrable>1</sqlt:deferrable> |
d0c12b9f |
260 | </sqlt:constraint> |
261 | </sqlt:constraints> |
262 | </sqlt:table> |
263 | </sqlt:schema> |
264 | EOXML |
265 | |
d0c12b9f |
266 | $obj = SQL::Translator->new( |
267 | debug => DEBUG, |
268 | trace => TRACE, |
269 | show_warnings => 1, |
270 | add_drop_table => 1, |
ac62dff1 |
271 | from => 'MySQL', |
272 | to => 'XML-SQLFairy', |
d0c12b9f |
273 | producer_args => { emit_empty_tags => 1 }, |
274 | ); |
f11724ad |
275 | lives_ok { $xml=$obj->translate($file); } "Translate (emit_empty_tags=>1) ran"; |
d0c12b9f |
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"; |
d0c12b9f |
281 | |
1e3867bf |
282 | } # end emit_empty_tags => 1 |
f11724ad |
283 | |
284 | # |
285 | # attrib_values => 1 |
286 | # |
1e3867bf |
287 | { |
288 | my ($obj,$ans,$xml); |
f11724ad |
289 | |
290 | $ans = <<EOXML; |
d3422086 |
291 | <sqlt:schema name="" database="" xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml"> |
446dfcbd |
292 | <sqlt:table name="Basic" order="3"> |
f11724ad |
293 | <sqlt:fields> |
d3422086 |
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" /> |
f11724ad |
298 | </sqlt:fields> |
299 | <sqlt:indices> |
d3422086 |
300 | <sqlt:index name="titleindex" type="NORMAL" fields="title" options="" /> |
f11724ad |
301 | </sqlt:indices> |
302 | <sqlt:constraints> |
e6c155dd |
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" /> |
f11724ad |
305 | </sqlt:constraints> |
306 | </sqlt:table> |
307 | </sqlt:schema> |
308 | EOXML |
309 | |
310 | $obj = SQL::Translator->new( |
311 | debug => DEBUG, |
312 | trace => TRACE, |
313 | show_warnings => 1, |
314 | add_drop_table => 1, |
315 | from => "MySQL", |
316 | to => "XML-SQLFairy", |
317 | producer_args => { attrib_values => 1 }, |
318 | ); |
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"; |
325 | |
1e3867bf |
326 | } # end attrib_values => 1 |
327 | |
328 | # |
329 | # View |
330 | # |
331 | # Thanks to Ken for the schema setup lifted from 13schema.t |
332 | { |
333 | my ($obj,$ans,$xml); |
334 | |
335 | $ans = <<EOXML; |
336 | <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml"> |
1e3867bf |
337 | <sqlt:name></sqlt:name> |
d3422086 |
338 | <sqlt:database></sqlt:database> |
1e3867bf |
339 | <sqlt:view> |
1e3867bf |
340 | <sqlt:name>foo_view</sqlt:name> |
1e3867bf |
341 | <sqlt:sql>select name, age from person</sqlt:sql> |
d3422086 |
342 | <sqlt:fields>name,age</sqlt:fields> |
343 | <sqlt:order>1</sqlt:order> |
1e3867bf |
344 | </sqlt:view> |
345 | </sqlt:schema> |
346 | EOXML |
347 | |
348 | $obj = SQL::Translator->new( |
349 | debug => DEBUG, |
350 | trace => TRACE, |
351 | show_warnings => 1, |
352 | add_drop_table => 1, |
353 | from => "MySQL", |
354 | to => "XML-SQLFairy", |
355 | ); |
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( |
361 | name => $name, |
362 | sql => $sql, |
363 | fields => $fields, |
364 | schema => $s, |
365 | ) or die $s->error; |
366 | |
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"; |
375 | } # end View |
376 | |
377 | # |
378 | # Trigger |
379 | # |
380 | # Thanks to Ken for the schema setup lifted from 13schema.t |
381 | { |
382 | my ($obj,$ans,$xml); |
383 | |
384 | $ans = <<EOXML; |
385 | <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml"> |
1e3867bf |
386 | <sqlt:name></sqlt:name> |
d3422086 |
387 | <sqlt:database></sqlt:database> |
1e3867bf |
388 | <sqlt:trigger> |
1e3867bf |
389 | <sqlt:name>foo_trigger</sqlt:name> |
d3422086 |
390 | <sqlt:database_event>insert</sqlt:database_event> |
391 | <sqlt:action>update modified=timestamp();</sqlt:action> |
1e3867bf |
392 | <sqlt:on_table>foo</sqlt:on_table> |
1e3867bf |
393 | <sqlt:perform_action_when>after</sqlt:perform_action_when> |
d3422086 |
394 | <sqlt:order>1</sqlt:order> |
1e3867bf |
395 | </sqlt:trigger> |
396 | </sqlt:schema> |
397 | EOXML |
398 | |
399 | $obj = SQL::Translator->new( |
400 | debug => DEBUG, |
401 | trace => TRACE, |
402 | show_warnings => 1, |
403 | add_drop_table => 1, |
404 | from => "MySQL", |
405 | to => "XML-SQLFairy", |
406 | ); |
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( |
414 | name => $name, |
415 | perform_action_when => $perform_action_when, |
416 | database_event => $database_event, |
417 | on_table => $on_table, |
418 | action => $action, |
419 | ) or die $s->error; |
420 | |
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"; |
429 | } # end Trigger |
430 | |
431 | # |
432 | # Procedure |
433 | # |
434 | # Thanks to Ken for the schema setup lifted from 13schema.t |
435 | { |
436 | my ($obj,$ans,$xml); |
437 | |
438 | $ans = <<EOXML; |
439 | <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml"> |
1e3867bf |
440 | <sqlt:name></sqlt:name> |
d3422086 |
441 | <sqlt:database></sqlt:database> |
1e3867bf |
442 | <sqlt:procedure> |
1e3867bf |
443 | <sqlt:name>foo_proc</sqlt:name> |
1e3867bf |
444 | <sqlt:sql>select foo from bar</sqlt:sql> |
d3422086 |
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> |
1e3867bf |
449 | </sqlt:procedure> |
450 | </sqlt:schema> |
451 | EOXML |
452 | |
453 | $obj = SQL::Translator->new( |
454 | debug => DEBUG, |
455 | trace => TRACE, |
456 | show_warnings => 1, |
457 | add_drop_table => 1, |
458 | from => "MySQL", |
459 | to => "XML-SQLFairy", |
460 | ); |
461 | my $s = $obj->schema; |
462 | my $name = 'foo_proc'; |
463 | my $sql = 'select foo from bar'; |
464 | my $parameters = 'foo, bar'; |
465 | my $owner = 'Nomar'; |
466 | my $comments = 'Go Sox!'; |
467 | my $p = $s->add_procedure( |
468 | name => $name, |
469 | sql => $sql, |
470 | parameters => $parameters, |
471 | owner => $owner, |
472 | comments => $comments, |
473 | ) or die $s->error; |
d3422086 |
474 | |
1e3867bf |
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"; |
483 | } # end Procedure |