--- /dev/null
+use strict;
+
+use FindBin qw/$Bin/;
+
+use Test::More;
+#use Test::SQL::Translator;
+use Test::Exception;
+use Data::Dumper;
+use SQL::Translator;
+use SQL::Translator::Constants qw(:sqlt_types :sqlt_constants);
+use Test::SQL::Translator qw(schema_ok);
+
+# Simple options. -d for debug
+my %opt;
+BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; }
+use constant DEBUG => (exists $opt{d} ? 1 : 0);
+
+
+# Testing 1,2,3,4...
+#=============================================================================
+
+#BEGIN {
+# maybe_plan(212, 'SQL::Translator::Parser::XML::SQLFairy');
+#}
+
+my $testschema = "$Bin/data/xml/schema.xml";
+open (my $testschema_fh, '<', $testschema) or die "$testschema: $!";
+
+my $sqlt;
+$sqlt = SQL::Translator->new({
+ debug => DEBUG,
+ show_warnings => 1,
+ add_drop_table => 1,
+});
+die "Can't find test schema $testschema" unless -e $testschema;
+
+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(
+ parser => 'XML',
+ producer => 'MySQL',
+ data => do { local $/; <$testschema_fh> },
+ ) 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;
+
+# Hmmm, when using schema_ok the field test data gets a bit too nested and
+# fiddly to work with. (See 28xml-xmi-parser-sqlfairy.t for more a split out
+# version)
+schema_ok( $scma, {
+ tables => [
+ {
+ name => "Basic",
+ options => [ { ENGINE => 'InnoDB' } ],
+ extra => {
+ foo => "bar",
+ hello => "world",
+ bar => "baz",
+ },
+ fields => [
+ {
+ name => "id",
+ data_type => "int",
+ default_value => undef,
+ is_nullable => 0,
+ size => 10,
+ is_primary_key => 1,
+ is_auto_increment => 1,
+ extra => { ZEROFILL => 1 },
+ },
+ {
+ name => "title",
+ data_type => "varchar",
+ is_nullable => 0,
+ default_value => "hello",
+ size => 100,
+ },
+ {
+ name => "description",
+ data_type => "text",
+ is_nullable => 1,
+ default_value => "",
+ },
+ {
+ name => "email",
+ data_type => "varchar",
+ size => 500,
+ is_unique => 1,
+ default_value => undef,
+ is_nullable => 1,
+ extra => {
+ foo => "bar",
+ hello => "world",
+ bar => "baz",
+ }
+ },
+ {
+ name => "explicitnulldef",
+ data_type => "varchar",
+ default_value => undef,
+ is_nullable => 1,
+ size => 255,
+ },
+ {
+ name => "explicitemptystring",
+ data_type => "varchar",
+ default_value => "",
+ is_nullable => 1,
+ size => 255,
+ },
+ {
+ name => "emptytagdef",
+ data_type => "varchar",
+ default_value => "",
+ is_nullable => 1,
+ comments => "Hello emptytagdef",
+ size => 255,
+ },
+ {
+ name => "another_id",
+ data_type => "int",
+ size => "10",
+ default_value => 2,
+ is_nullable => 1,
+ is_foreign_key => 1,
+ },
+ {
+ name => "timest",
+ data_type => "timestamp",
+ size => "0",
+ is_nullable => 1,
+ },
+ ],
+ constraints => [
+ {
+ type => PRIMARY_KEY,
+ fields => ["id"],
+ extra => {
+ foo => "bar",
+ hello => "world",
+ bar => "baz",
+ },
+ },
+ {
+ name => 'emailuniqueindex',
+ type => UNIQUE,
+ fields => ["email"],
+ },
+ {
+ type => FOREIGN_KEY,
+ fields => ["another_id"],
+ reference_table => "Another",
+ reference_fields => ["id"],
+ name => 'Basic_fk'
+ },
+ ],
+ indices => [
+ {
+ name => "titleindex",
+ fields => ["title"],
+ extra => {
+ foo => "bar",
+ hello => "world",
+ bar => "baz",
+ },
+ },
+ ],
+ }, # end table Basic
+ {
+ name => "Another",
+ extra => {
+ foo => "bar",
+ hello => "world",
+ bar => "baz",
+ },
+ options => [ { ENGINE => 'InnoDB' } ],
+ fields => [
+ {
+ name => "id",
+ data_type => "int",
+ default_value => undef,
+ is_nullable => 0,
+ size => 10,
+ is_primary_key => 1,
+ is_auto_increment => 1,
+ },
+ ],
+ }, # end table Another
+ ], # end tables
+
+ views => [
+ {
+ name => 'email_list',
+ sql => "SELECT email FROM Basic WHERE (email IS NOT NULL)",
+ fields => ['email'],
+ extra => {
+ foo => "bar",
+ hello => "world",
+ bar => "baz",
+ },
+ },
+ ],
+
+ triggers => [
+ {
+ name => 'foo_trigger',
+ perform_action_when => 'after',
+ database_events => 'insert',
+ on_table => 'Basic',
+ action => 'update modified=timestamp();',
+ extra => {
+ foo => "bar",
+ hello => "world",
+ bar => "baz",
+ },
+ },
+ {
+ name => 'bar_trigger',
+ perform_action_when => 'before',
+ database_events => 'insert,update',
+ on_table => 'Basic',
+ action => 'update modified2=timestamp();',
+ extra => {
+ hello => "aliens",
+ },
+ },
+ ],
+
+ procedures => [
+ {
+ name => 'foo_proc',
+ sql => 'select foo from bar',
+ parameters => ['foo', 'bar'],
+ owner => 'Nomar',
+ comments => 'Go Sox!',
+ extra => {
+ foo => "bar",
+ hello => "world",
+ bar => "baz",
+ },
+ },
+ ],
+
+}); # end schema
+
+done_testing;
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Created by SQL::Translator::Producer::SqlfXML
+Created on Fri Aug 15 15:08:18 2003
+
+ -->
+<schema xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
+
+ <tables>
+ <table order="1" name="one">
+ <fields>
+ <field
+ name="same"
+ is_primary_key="0" is_foreign_key="0"
+ size="100" is_auto_increment="0" data_type="varchar"
+ order="1" default_value="hello" is_nullable="0" />
+ </fields>
+ </table>
+ <table order="2" name="two">
+ <fields>
+ <field
+ name="same"
+ is_primary_key="0" is_foreign_key="0"
+ size="100" is_auto_increment="0" data_type="varchar"
+ order="1" default_value="hello" is_nullable="0" />
+ </fields>
+ </table>
+ </tables>
+
+
+</schema>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Created by SQL::Translator::Producer::SqlfXML
+Created on Fri Aug 15 15:08:18 2003
+
+ -->
+<schema xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
+
+ <tables>
+ <table order="1" name="Basic">
+ <fields>
+ <field
+ name="id"
+ is_primary_key="1" is_foreign_key="0"
+ size="10" data_type="int" is_auto_increment="1" order="1"
+ is_nullable="0">
+ <extra ZEROFILL="1" />
+ </field>
+ <field
+ name="title"
+ is_primary_key="0" is_foreign_key="0"
+ size="100" is_auto_increment="0" data_type="varchar"
+ order="2" default_value="hello" is_nullable="0" />
+ <field
+ name="description"
+ size="0" data_type="text" order="3" default_value="" />
+ <field name="email" size="500" data_type="varchar" order="4">
+ <extra foo="bar" hello="world" bar="baz" />
+ </field>
+ <field name="explicitnulldef" size="0" data_type="varchar" order="5" />
+ <field name="explicitemptystring" size="0"
+ data_type="varchar" order="6" default_value="" />
+ <field name="emptytagdef" size="0"
+ data_type="varchar" order="7" default_value="" >
+ <comments>Hello emptytagdef</comments>
+ </field>
+ <field name="another_id" size="10"
+ data_type="int" default_value="2" />
+ <field name="timest" size="0"
+ data_type="timestamp" order="7" >
+ </field>
+ </fields>
+
+ <indices>
+ <index name="titleindex" fields="title" type="NORMAL">
+ <extra foo="bar" hello="world" bar="baz" />
+ </index>
+ </indices>
+
+ <constraints>
+ <constraint name="" type="PRIMARY KEY" fields="id"
+ reference_table="" options="" deferrable="1" match_type=""
+ expression="" on_update="" on_delete="">
+ <extra foo="bar" hello="world" bar="baz" />
+ </constraint>
+ <constraint name="emailuniqueindex" type="UNIQUE" fields="email" />
+ <constraint name="" type="FOREIGN KEY" fields="another_id"
+ reference_table="Another" options="" deferrable="1" match_type=""
+ expression="" on_update="" on_delete="">
+ </constraint>
+ </constraints>
+
+ <extra foo="bar" hello="world" bar="baz" mysql_table_type="InnoDB" />
+ </table>
+
+ <table order="1" name="Another">
+ <fields>
+ <field
+ name="id"
+ is_primary_key="1" is_foreign_key="0"
+ size="10" data_type="int" is_auto_increment="1" order="1"
+ is_nullable="0">
+ </field>
+ </fields>
+
+ <constraints>
+ <constraint name="" type="PRIMARY KEY" fields="id"
+ reference_table="" options="" deferrable="1" match_type=""
+ expression="" on_update="" on_delete="">
+ </constraint>
+ </constraints>
+
+ <extra foo="bar" hello="world" bar="baz" mysql_table_type="InnoDB" />
+ </table>
+ </tables>
+
+ <views>
+ <view name="email_list" fields="email" order="1">
+ <sql>SELECT email FROM Basic WHERE (email IS NOT NULL)</sql>
+ <extra foo="bar" hello="world" bar="baz" />
+ </view>
+ </views>
+
+ <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>
+ <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>
+ <procedure name="foo_proc" order="1" owner="Nomar" parameters="foo,bar">
+ <sql>select foo from bar</sql>
+ <comments>Go Sox!</comments>
+ <extra foo="bar" hello="world" bar="baz" />
+ </procedure>
+ </procedures>
+
+</schema>