X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FProducer%2FYAML.pm;h=8e061855f89fcf06eed1d6c0ae78ba829207a356;hb=d2fd01902749d1e3aa650b8faa8b43e13cfb8c1e;hp=408f361322fcc288b33396e5f6ae9216b714315c;hpb=37b15d8c38751b7f03405626fd180a05dfd423af;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Producer/YAML.pm b/lib/SQL/Translator/Producer/YAML.pm index 408f361..8e06185 100644 --- a/lib/SQL/Translator/Producer/YAML.pm +++ b/lib/SQL/Translator/Producer/YAML.pm @@ -1,10 +1,9 @@ package SQL::Translator::Producer::YAML; # ------------------------------------------------------------------- -# $Id: YAML.pm,v 1.4 2003-10-09 21:51:08 kycl4rk Exp $ +# $Id: YAML.pm,v 1.10 2004-03-29 10:20:03 grommit Exp $ # ------------------------------------------------------------------- -# Copyright (C) 2003 darren chamberlain , -# Ken Y. Clark . +# Copyright (C) 2002-4 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 @@ -21,9 +20,28 @@ package SQL::Translator::Producer::YAML; # 02111-1307 USA # ------------------------------------------------------------------- +=head1 NAME + +SQL::Translator::Producer::YAML - A YAML producer for SQL::Translator + +=head1 SYNOPSIS + + use SQL::Translator; + + my $translator = SQL::Translator->new(producer => 'YAML'); + +=head1 DESCRIPTION + +This module uses YAML to serialize a schema to a string so that it +can be saved to disk. Serializing a schema and then calling producers +on the stored can realize significant performance gains when parsing +takes a long time. + +=cut + use strict; use vars qw($VERSION); -$VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.10 $ =~ /(\d+)\.(\d+)/; use YAML qw(Dump); @@ -35,18 +53,33 @@ sub produce { return Dump({ schema => { tables => { - map { ($_->name => view_table($_)) } $schema->get_tables, + map { ($_->name => view_table($_)) } + $schema->get_tables, }, views => { - map { ($_->name => view_view($_)) } $schema->get_views, + map { ($_->name => view_view($_)) } + $schema->get_views, }, triggers => { - map { ($_->name => view_trigger($_)) } $schema->get_triggers, + map { ($_->name => view_trigger($_)) } + $schema->get_triggers, }, procedures => { map { ($_->name => view_procedure($_)) } - $schema->get_procedures, + $schema->get_procedures, }, + }, + translator => { + add_drop_table => $translator->add_drop_table, + filename => $translator->filename, + no_comments => $translator->no_comments, + parser_args => $translator->parser_args, + producer_args => $translator->producer_args, + parser_type => $translator->parser_type, + producer_type => $translator->producer_type, + show_warnings => $translator->show_warnings, + trace => $translator->trace, + version => $translator->version, } }); } @@ -54,20 +87,45 @@ sub produce { # ------------------------------------------------------------------- sub view_table { my $table = shift; - my $name = $table->name; return { - 'name' => $table->name, - 'order' => $table->order, - 'options' => $table->options || [], - 'comments' => $table->comments || '', - 'fields' => { - map { ($_->name => view_field($_)) } $table->get_fields + 'name' => $table->name, + 'order' => $table->order, + 'options' => $table->options || [], + 'comments' => $table->comments || '', + 'constraints' => [ + map { view_constraint($_) } $table->get_constraints + ], + 'indices' => [ + map { view_index($_) } $table->get_indices + ], + 'fields' => { + map { ($_->name => view_field($_)) } + $table->get_fields }, }; } # ------------------------------------------------------------------- +sub view_constraint { + my $constraint = shift; + + return { + 'deferrable' => scalar $constraint->deferrable, + 'expression' => scalar $constraint->expression, + 'fields' => scalar $constraint->field_names, + 'match_type' => scalar $constraint->match_type, + 'name' => scalar $constraint->name, + 'options' => scalar $constraint->options, + 'on_delete' => scalar $constraint->on_delete, + 'on_update' => scalar $constraint->on_update, + 'reference_fields' => scalar $constraint->reference_fields, + 'reference_table' => scalar $constraint->reference_table, + 'type' => scalar $constraint->type, + }; +} + +# ------------------------------------------------------------------- sub view_field { my $field = shift; @@ -125,11 +183,25 @@ sub view_view { }; } +# ------------------------------------------------------------------- +sub view_index { + my $index = shift; + + return { + 'name' => scalar $index->name, + 'type' => scalar $index->type, + 'fields' => scalar $index->fields, + 'options' => scalar $index->options, + }; +} + 1; -=head1 NAME +# ------------------------------------------------------------------- -SQL::Translator::Producer::YAML - A YAML producer for SQL::Translator +=head1 SEE ALSO + +SQL::Translator, YAML, http://www.yaml.org/. =head1 AUTHORS