mysql_table_type extra data and InnoDB derivation fix.
[dbsrgits/SQL-Translator.git] / t / 17sqlfxml-producer.t
index 0f032e7..54003c4 100644 (file)
@@ -30,7 +30,7 @@ local $SIG{__WARN__} = sub {
 #=============================================================================
 
 BEGIN {
-    maybe_plan(12,
+    maybe_plan(14,
         'XML::Writer',
         'Test::Differences',
         'SQL::Translator::Producer::XML::SQLFairy');
@@ -47,31 +47,48 @@ use SQL::Translator::Producer::XML::SQLFairy;
 my ($obj,$ans,$xml);
 
 $ans = <<EOXML;
-<sqlf:schema name="" database="" xmlns:sqlf="http://sqlfairy.sourceforge.net/sqlfairy.xml">
-  <sqlf:table name="Basic" order="1">
-    <sqlf:fields>
-      <sqlf: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">
-        <sqlf:comments>comment on id field</sqlf:comments>
-      </sqlf:field>
-      <sqlf: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">
-        <sqlf:comments></sqlf:comments>
-      </sqlf:field>
-      <sqlf: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">
-        <sqlf:comments></sqlf:comments>
-      </sqlf:field>
-      <sqlf: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">
-        <sqlf:comments></sqlf:comments>
-      </sqlf:field>
-    </sqlf:fields>
-    <sqlf:indices>
-      <sqlf:index name="titleindex" type="NORMAL" fields="title" options="" />
-    </sqlf:indices>
-    <sqlf:constraints>
-      <sqlf:constraint name="" type="PRIMARY KEY" fields="id" reference_table="" reference_fields="" on_delete="" on_update="" match_type="" expression="" options="" deferrable="1" />
-      <sqlf:constraint name="" type="UNIQUE" fields="email" reference_table="" reference_fields="" on_delete="" on_update="" match_type="" expression="" options="" deferrable="1" />
-    </sqlf:constraints>
-  </sqlf:table>
-</sqlf:schema>
+<schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
+  <extra />
+  <tables>
+    <table name="Basic" order="1">
+      <extra />
+      <fields>
+        <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">
+          <extra />
+          <comments>comment on id field</comments>
+        </field>
+        <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">
+          <extra />
+          <comments></comments>
+        </field>
+        <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">
+          <extra />
+          <comments></comments>
+        </field>
+        <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">
+          <extra />
+          <comments></comments>
+        </field>
+      </fields>
+      <indices>
+        <index name="titleindex" type="NORMAL" fields="title" options="">
+          <extra />
+        </index>
+      </indices>
+      <constraints>
+        <constraint name="" type="PRIMARY KEY" fields="id" reference_table="" reference_fields="" on_delete="" on_update="" match_type="" expression="" options="" deferrable="1">
+          <extra />
+        </constraint>
+        <constraint name="" type="UNIQUE" fields="email" reference_table="" reference_fields="" on_delete="" on_update="" match_type="" expression="" options="" deferrable="1">
+          <extra />
+        </constraint>
+      </constraints>
+    </table>
+  </tables>
+  <views></views>
+  <triggers></triggers>
+  <procedures></procedures>
+</schema>
 EOXML
 
 $obj = SQL::Translator->new(
@@ -82,7 +99,7 @@ $obj = SQL::Translator->new(
     from           => "MySQL",
     to             => "XML-SQLFairy",
 );
-lives_ok {$xml = $obj->translate($file);} "Translate (attrib_values=>1) ran";
+$xml = $obj->translate($file) or die $obj->error;
 ok("$xml" ne ""                             ,"Produced something!");
 print "XML:\n$xml" if DEBUG;
 # Strip sqlf header with its variable date so we diff safely
@@ -99,11 +116,18 @@ eq_or_diff $xml, $ans, "XML looks right";
 my ($obj,$ans,$xml);
 
 $ans = <<EOXML;
-<sqlf:schema name="" database="" xmlns:sqlf="http://sqlfairy.sourceforge.net/sqlfairy.xml">
-  <sqlf:view name="foo_view" fields="name,age" order="1">
-    <sqlf:sql>select name, age from person</sqlf:sql>
-  </sqlf:view>
-</sqlf:schema>
+<schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
+  <extra />
+  <tables></tables>
+  <views>
+    <view name="foo_view" fields="name,age" order="1">
+      <sql>select name, age from person</sql>
+      <extra hello="world" />
+    </view>
+  </views>
+  <triggers></triggers>
+  <procedures></procedures>
+</schema>
 EOXML
 
     $obj = SQL::Translator->new(
@@ -122,6 +146,7 @@ EOXML
         name   => $name,
         sql    => $sql,
         fields => $fields,
+        extra  => { hello => "world" },
         schema => $s,
     ) or die $s->error;
 
@@ -143,11 +168,18 @@ EOXML
 my ($obj,$ans,$xml);
 
 $ans = <<EOXML;
-<sqlf:schema name="" database="" xmlns:sqlf="http://sqlfairy.sourceforge.net/sqlfairy.xml">
-  <sqlf:trigger name="foo_trigger" database_event="insert" on_table="foo" perform_action_when="after" order="1">
-    <sqlf:action>update modified=timestamp();</sqlf:action>
-  </sqlf:trigger>
-</sqlf:schema>
+<schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
+  <extra />
+  <tables></tables>
+  <views></views>
+  <triggers>
+    <trigger name="foo_trigger" database_event="insert" on_table="foo" perform_action_when="after" order="1">
+      <action>update modified=timestamp();</action>
+      <extra hello="world" />
+    </trigger>
+  </triggers>
+  <procedures></procedures>
+</schema>
 EOXML
 
     $obj = SQL::Translator->new(
@@ -170,6 +202,7 @@ EOXML
         database_event      => $database_event,
         on_table            => $on_table,
         action              => $action,
+        extra               => { hello => "world" },
     ) or die $s->error;
 
     # As we have created a Schema we give translate a dummy string so that
@@ -190,12 +223,19 @@ EOXML
 my ($obj,$ans,$xml);
 
 $ans = <<EOXML;
-<sqlf:schema name="" database="" xmlns:sqlf="http://sqlfairy.sourceforge.net/sqlfairy.xml">
-  <sqlf:procedure name="foo_proc" parameters="foo,bar" owner="Nomar" order="1">
-    <sqlf:sql>select foo from bar</sqlf:sql>
-    <sqlf:comments>Go Sox!</sqlf:comments>
-  </sqlf:procedure>
-</sqlf:schema>
+<schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
+  <extra />
+  <tables></tables>
+  <views></views>
+  <triggers></triggers>
+  <procedures>
+    <procedure name="foo_proc" parameters="foo,bar" owner="Nomar" order="1">
+      <sql>select foo from bar</sql>
+      <comments>Go Sox!</comments>
+      <extra hello="world" />
+    </procedure>
+  </procedures>
+</schema>
 EOXML
 
     $obj = SQL::Translator->new(
@@ -218,6 +258,7 @@ EOXML
         parameters => $parameters,
         owner      => $owner,
         comments   => $comments,
+        extra      => { hello => "world" },
     ) or die $s->error;
 
     # As we have created a Schema we give translate a dummy string so that
@@ -229,3 +270,58 @@ EOXML
     $xml =~ s/^([^\n]*\n){7}//m; 
     eq_or_diff $xml, $ans                       ,"XML looks right";
 } # end Procedure
+
+#
+# Field.extra
+#
+{
+my ($obj,$ans,$xml);
+
+$ans = <<EOXML;
+<schema name="" database="" xmlns="http://sqlfairy.sourceforge.net/sqlfairy.xml">
+  <extra />
+  <tables>
+    <table name="Basic" order="2">
+      <extra />
+      <fields>
+        <field name="foo" data_type="integer" size="10" is_nullable="1" is_auto_increment="0" is_primary_key="0" is_foreign_key="0" order="5">
+          <extra ZEROFILL="1" />
+          <comments></comments>
+        </field>
+      </fields>
+      <indices></indices>
+      <constraints></constraints>
+    </table>
+  </tables>
+  <views></views>
+  <triggers></triggers>
+  <procedures></procedures>
+</schema>
+EOXML
+
+    $obj = SQL::Translator->new(
+        debug          => DEBUG,
+        trace          => TRACE,
+        show_warnings  => 1,
+        add_drop_table => 1,
+        from           => "MySQL",
+        to             => "XML-SQLFairy",
+    );
+    my $s = $obj->schema;
+    my $t = $s->add_table( name => "Basic" ) or die $s->error;
+    my $f = $t->add_field(
+        name      => "foo",
+        data_type => "integer",
+        size      => "10",
+    ) or die $t->error;
+    $f->extra(ZEROFILL => "1");
+
+    # As we have created a Schema we give translate a dummy string so that
+    # it will run the produce.
+    lives_ok {$xml =$obj->translate("FOO");} "Translate (Field.extra) ran";
+    ok("$xml" ne ""                             ,"Produced something!");
+    print "XML:\n$xml" if DEBUG;
+    # Strip sqlf header with its variable date so we diff safely
+    $xml =~ s/^([^\n]*\n){7}//m;
+    eq_or_diff $xml, $ans                       ,"XML looks right";
+} # end extra