Added Views, Procedures and Triggers to bring it inline with the current Schema features.
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / XML / SQLFairy.pm
index 9ed4180..2f98873 100644 (file)
@@ -1,7 +1,7 @@
 package SQL::Translator::Producer::XML::SQLFairy;
 
 # -------------------------------------------------------------------
-# $Id: SQLFairy.pm,v 1.1 2003-08-21 00:45:43 kycl4rk Exp $
+# $Id: SQLFairy.pm,v 1.7 2003-10-20 13:15:23 grommit Exp $
 # -------------------------------------------------------------------
 # Copyright (C) 2003 Ken Y. Clark <kclark@cpan.org>,
 #                    darren chamberlain <darren@cpan.org>,
@@ -27,7 +27,7 @@ package SQL::Translator::Producer::XML::SQLFairy;
 
 =head1 NAME
 
-SQL::Translator::Producer::SqlfXML - SQLFairy's default XML format
+SQL::Translator::Producer::XML::SQLFairy - SQLFairy's default XML format
 
 =head1 SYNOPSIS
 
@@ -35,7 +35,7 @@ SQL::Translator::Producer::SqlfXML - SQLFairy's default XML format
 
   my $t              = SQL::Translator->new(
       from           => 'MySQL',
-      to             => 'SqlfXML',
+      to             => 'XML-SQLFairy',
       filename       => 'schema.sql',
       show_warnings  => 1,
       add_drop_table => 1,
@@ -78,7 +78,7 @@ Creates XML output of a schema.
 
 use strict;
 use vars qw[ $VERSION @EXPORT_OK ];
-$VERSION = sprintf "%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/;
+$VERSION = sprintf "%d.%02d", q$Revision: 1.7 $ =~ /(\d+)\.(\d+)/;
 
 use Exporter;
 use base qw(Exporter);
@@ -90,7 +90,7 @@ use XML::Writer;
 
 my $Namespace = 'http://sqlfairy.sourceforge.net/sqlfairy.xml';
 my $Name      = 'sqlt';
-my $PArgs;
+my $PArgs     = {};
 
 sub produce {
     my $translator  = shift;
@@ -107,7 +107,9 @@ sub produce {
 
     $xml->xmlDecl('UTF-8');
     $xml->comment(header_comment('', ''));
-    $xml->startTag([ $Namespace => 'schema' ]);
+    #$xml->startTag([ $Namespace => 'schema' ]);
+    xml_obj($xml, $schema,
+        tag => "schema", methods => [qw/name database/], end_tag => 0 );
 
     #
     # Table
@@ -127,7 +129,8 @@ sub produce {
                                tag     =>"field",
                                end_tag => 1,
                                methods =>[qw/name data_type default_value is_auto_increment
-                     is_primary_key is_nullable is_foreign_key order size
+                    is_primary_key is_nullable is_foreign_key order size
+                    comments 
                                /],
                        );
         }
@@ -166,7 +169,32 @@ sub produce {
 
         $xml->endTag( [ $Namespace => 'table' ] );
     }
+    
+    #
+    # Views
+    #
+    for my $foo ( $schema->get_views ) {
+               xml_obj($xml, $foo, tag => "view",
+        methods => [qw/name sql fields order/], end_tag => 1 );
+    }
+    
+    #
+    # Tiggers
+    #
+    for my $foo ( $schema->get_triggers ) {
+               xml_obj($xml, $foo, tag => "trigger",
+        methods => [qw/name perform_action_when database_event fields on_table
+        action order/], end_tag => 1 );
+    }
 
+    #
+    # Procedures
+    #
+    for my $foo ( $schema->get_procedures ) {
+               xml_obj($xml, $foo, tag => "procedure",
+        methods => [qw/name sql parameters owner comments order/], end_tag=>1 );
+    }
+    
     $xml->endTag([ $Namespace => 'schema' ]);
     $xml->end;
 
@@ -174,6 +202,12 @@ sub produce {
 }
 
 # -------------------------------------------------------------------
+#
+# TODO 
+# - Doc this sub
+# - Should the Namespace be passed in instead of global? Pass in the same
+#   as Writer ie [ NS => TAGNAME ]
+#
 sub xml_obj {
        my ($xml, $obj, %args) = @_;
        my $tag                = $args{'tag'}              || '';
@@ -212,7 +246,7 @@ sub xml_objAttr {
     my ($xml, $obj, @methods) = @_;
     my $emit_empty            = $PArgs->{'emit_empty_tags'};
 
-       for my $method ( @methods ) {
+       for my $method ( sort @methods ) {
         my $val = $obj->$method;
         debug "        ".ref($obj)."->$method=",
               (defined $val ? "'$val'" : "<UNDEF>");
@@ -242,7 +276,7 @@ Mark Addison E<lt>mark.addison@itn.co.ukE<gt>.
 
 =head1 SEE ALSO
 
-perl(1), SQL::Translator, SQL::Translator::Parser::SqlfXML,
+perl(1), SQL::Translator, SQL::Translator::Parser::XML::SQLFairy,
 SQL::Translator::Schema, XML::Writer.
 
 =cut