X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FProducer%2FXML.pm;h=6cb7b276cfbe605b38e9c8aef04d079556974fa8;hb=d4f84dd192edc7a64a0b1a9923f1bafc0bc5ef9d;hp=326792ce824464f92c0fc675ddc7b2fe4b3c6318;hpb=fb6b0318edba55bf778078083531a6fbcd94323e;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Producer/XML.pm b/lib/SQL/Translator/Producer/XML.pm index 326792c..6cb7b27 100644 --- a/lib/SQL/Translator/Producer/XML.pm +++ b/lib/SQL/Translator/Producer/XML.pm @@ -1,11 +1,9 @@ package SQL::Translator::Producer::XML; # ------------------------------------------------------------------- -# $Id: XML.pm,v 1.8 2003-05-06 12:47:27 dlc Exp $ +# $Id: XML.pm 1440 2009-01-17 16:31:57Z jawnsy $ # ------------------------------------------------------------------- -# Copyright (C) 2003 Ken Y. Clark , -# darren chamberlain , -# Chris Mungall +# Copyright (C) 2002-2009 SQLFairy Authors # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -22,179 +20,36 @@ package SQL::Translator::Producer::XML; # 02111-1307 USA # ------------------------------------------------------------------- -use strict; -use vars qw[ $VERSION ]; -$VERSION = sprintf "%d.%02d", q$Revision: 1.8 $ =~ /(\d+)\.(\d+)/; - -use IO::Scalar; -use SQL::Translator::Utils qw(header_comment); -use XML::Writer; - -my $sqlf_ns = 'http://sqlfairy.sourceforge.net/sqlfairy.xml'; - -# ------------------------------------------------------------------- -sub produce { - my ( $translator, $data ) = @_; - #my $prargs = $translator->producer_args; - my $prargs = { }; - my $io = IO::Scalar->new; - - my $xml = XML::Writer->new(OUTPUT => $io, - NAMESPACES => 1, - PREFIX_MAP => { $sqlf_ns => 'sqlf' }, - DATA_MODE => 1, - DATA_INDENT => 2); - - - $xml->xmlDecl("UTF-8"); - $xml->comment(header_comment('', '')); - $xml->startTag([ $sqlf_ns => "schema" ]); - - for my $table ( - map { $_->[1] } - sort { $a->[0] <=> $b->[0] } - map { [ $_->{'order'}, $_ ] } - values %$data - ) { - $xml->startTag([ $sqlf_ns => "table" ]); - - $xml->dataElement([ $sqlf_ns => "name" ], $table->{'table_name'}); - $xml->dataElement([ $sqlf_ns => "order" ], $table->{'order'}); - - # - # Fields - # - $xml->startTag([ $sqlf_ns => "fields" ]); - for my $field ( - map { $_->[1] } - sort { $a->[0] <=> $b->[0] } - map { [ $_->{'order'}, $_ ] } - values %{ $table->{'fields'} } - ) { - $xml->startTag([ $sqlf_ns => "field" ]); - - for my $key ( keys %$field ) { - my $val = defined $field->{ $key } ? $field->{ $key } : ''; - $val = ref $val eq 'ARRAY' ? join(',', @$val) : $val; - $xml->dataElement([ $sqlf_ns => $key ], $val) - if ($val || (!$val && $prargs->{'emit_empty_tags'})); - } - - $xml->endTag([ $sqlf_ns => "field" ]); - } - $xml->endTag([ $sqlf_ns => "fields" ]); - - # - # Indices - # - $xml->startTag([ $sqlf_ns => "indices" ]); - for my $index (@{$table->{'indices'}}) { - $xml->startTag([ $sqlf_ns => "index" ]); - - for my $key (keys %$index) { - my $val = defined $index->{ $key } ? $index->{ $key } : ''; - $val = ref $val eq 'ARRAY' ? join(',', @$val) : $val; - $xml->dataElement([ $sqlf_ns => $key ], $val); - } - - $xml->endTag([ $sqlf_ns => "index" ]); - } - $xml->endTag([ $sqlf_ns => "indices" ]); - - $xml->endTag([ $sqlf_ns => "table" ]); - } - - $xml->endTag([ $sqlf_ns => "schema" ]); - $xml->end; - - return $io; -} - -1; -__END__ - -# ------------------------------------------------------------------- -# The eyes of fire, the nostrils of air, -# The mouth of water, the beard of earth. -# William Blake -# ------------------------------------------------------------------- +=pod =head1 NAME -SQL::Translator::Producer::XML - XML output - -=head1 SYNOPSIS - - use SQL::Translator::Producer::XML; +SQL::Translator::Producer::XML - Alias to XML::SQLFairy producer =head1 DESCRIPTION -Meant to create some sort of usable XML output. - -=head1 ARGS - -Takes the following optional C: - -=over 4 +Previous versions of SQL::Translator included an XML producer, but the +namespace has since been further subdivided. Therefore, this module is +now just just an alias to the XML::SQLFairy producer. -=item emit_empty_tags - -If this is set to a true value, then tags corresponding to value-less -elements will be emitted. For example, take this schema: - - CREATE TABLE random ( - id int auto_increment PRIMARY KEY, - foo varchar(255) not null default '', - updated timestamp - ); - -With C = 1, this will be dumped with XML similar to: - - - random - 1 - - - 1 - - 1 - int - id - - 1 - 1 - - field - - -With C = 0, you'd get: +=head1 SEE ALSO -
- random - 1 - - - 1 - 1 - int - id - 1 - 1 - field - +SQL::Translator::Producer::XML::SQLFairy. -This can lead to dramatic size savings. +=head1 AUTHOR -=back +Ken Y. Clark Ekclark@cpan.orgE. -=pod +=cut -=head1 AUTHOR +# ------------------------------------------------------------------- -Ken Y. Clark Ekclark@cpan.orgE +use strict; +use vars qw[ $DEBUG ]; +$DEBUG = 1 unless defined $DEBUG; -=head1 SEE ALSO +use SQL::Translator::Producer::XML::SQLFairy; -XML::Dumper; +*produce = \&SQL::Translator::Producer::XML::SQLFairy::produce; -=cut +1;