Robert Bohne wrote: > Hello developer, > > currently SQL::T::Parser::XML... doesn't support database_events. > > The current XML format has an attribute database_event which can be used > to set one database event. > Example: > <triggers> > <trigger name="foo_trigger" database_event="insert" on_table="Basic" > perform_action_when="after" order="1"> > <action>update modified=timestamp();</action> > <extra foo="bar" hello="world" bar="baz" /> > </trigger> > </triggers> > > But we need more than one database event. My idea for a new XML Syntax. > It deletes the attribute database_event and adds a tag database_events. > Example: > <triggers> > <trigger name="foo_trigger" on_table="Basic" > perform_action_when="after" order="1"> > <database_events> > <event>insert</event> > </database_events> > <action>update modified=timestamp();</action> > <extra foo="bar" hello="world" bar="baz" /> > </trigger> > </triggers> > > The parser should support both variants and the producer create only the > new style.
I did some work on the failing tests yesterday, and along the way fixed this. What I did is make database_events an attribute which takes a comma-separated list of event names. This change has not yet reached CPAN, so if you feel strongly that your syntax is better, please contribute a patch against trunk and we will consider it. Here are the relevant changes I made yesterday: === lib/SQL/Translator/Parser/XML/SQLFairy.pm ================================================================== --- lib/SQL/Translator/Parser/XML/SQLFairy.pm (revision 1510) +++ lib/SQL/Translator/Parser/XML/SQLFairy.pm (revision 1522) @@ -102,6 +102,7 @@ $DEBUG = 0 unless defined $DEBUG; use Data::Dumper; +use Carp::Clan qw/^SQL::Translator/; use Exporter; use base qw(Exporter); @EXPORT_OK = qw(parse); @@ -232,9 +233,24 @@ ); foreach (@nodes) { my %data = get_tagfields($xp, $_, "sqlf:", qw/ - name perform_action_when database_event fields on_table action order + name perform_action_when database_event database_events fields on_table action order extra /); + + # back compat + if (my $evt = $data{database_event} and $translator->{show_warnings}) { + carp 'The database_event tag is deprecated - please use database_events (which can take one or more comma separated event names)'; + $data{database_events} = join (', ', + $data{database_events} || (), + $evt, + ); + } + + # split into arrayref + if (my $evts = $data{database_events}) { + $data{database_events} = [split (/\s*,\s*/, $evts) ]; + } + $schema->add_trigger( %data ) or die $schema->error; } === t/data/xml/schema.xml ================================================================== --- t/data/xml/schema.xml (revision 1510) +++ t/data/xml/schema.xml (revision 1522) @@ -92,11 +92,16 @@ </views> <triggers> - <trigger name="foo_trigger" database_events="insert" on_table="Basic" + <trigger name="foo_trigger" database_event="insert" on_table="Basic" perform_action_when="after" order="1"> <action>update modified=timestamp();</action> <extra foo="bar" hello="world" bar="baz" /> </trigger> + <trigger name="bar_trigger" database_events="insert , update" on_table="Basic" + perform_action_when="before" order="1"> + <action>update modified2=timestamp();</action> + <extra hello="aliens" /> + </trigger> </triggers> <procedures> === t/16xml-parser.t ================================================================== --- t/16xml-parser.t (revision 1510) +++ t/16xml-parser.t (revision 1522) @@ -27,7 +27,7 @@ #============================================================================= BEGIN { - maybe_plan(204, 'SQL::Translator::Parser::XML::SQLFairy'); + maybe_plan(212, 'SQL::Translator::Parser::XML::SQLFairy'); } my $testschema = "$Bin/data/xml/schema.xml"; @@ -39,13 +39,22 @@ add_drop_table => 1, ); die "Can't find test schema $testschema" unless -e $testschema; -my $sql = $sqlt->translate( + +my $sql; +{ + my @w; + local $SIG{__WARN__} = sub { push @w, $_[0] if $_[0] =~ /The database_event tag is deprecated - please use database_events/ }; + + $sql = $sqlt->translate( from => 'XML-SQLFairy', to => 'MySQL', filename => $testschema, -) or die $sqlt->error; -print $sql if DEBUG; + ) or die $sqlt->error; + print $sql if DEBUG; + ok (@w, 'database_event deprecation warning issued'); +} + # Test the schema objs generted from the XML # my $scma = $sqlt->schema; @@ -220,6 +229,16 @@ bar => "baz", }, }, + { + name => 'bar_trigger', + perform_action_when => 'before', + database_events => 'insert,update', + on_table => 'Basic', + action => 'update modified2=timestamp();', + extra => { + hello => "aliens", + }, + }, ], procedures => [ ------------------------------------------------------------------------------ Register Now & Save for Velocity, the Web Performance & Operations Conference from O'Reilly Media. Velocity features a full day of expert-led, hands-on workshops and two days of sessions from industry leaders in dedicated Performance & Operations tracks. Use code vel09scf and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf -- sqlfairy-developers mailing list sqlfairy-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlfairy-developers