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>,
=head1 NAME
-SQL::Translator::Producer::SqlfXML - SQLFairy's default XML format
+SQL::Translator::Producer::XML::SQLFairy - SQLFairy's default XML format
=head1 SYNOPSIS
my $t = SQL::Translator->new(
from => 'MySQL',
- to => 'SqlfXML',
+ to => 'XML-SQLFairy',
filename => 'schema.sql',
show_warnings => 1,
add_drop_table => 1,
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);
my $Namespace = 'http://sqlfairy.sourceforge.net/sqlfairy.xml';
my $Name = 'sqlt';
-my $PArgs;
+my $PArgs = {};
sub produce {
my $translator = shift;
$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
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
/],
);
}
$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;
}
# -------------------------------------------------------------------
+#
+# 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'} || '';
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>");
=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