Adding new schema differ.
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / YAML.pm
CommitLineData
d3fad399 1package SQL::Translator::Producer::YAML;
2
3# -------------------------------------------------------------------
75c75c55 4# $Id: YAML.pm,v 1.5 2003-10-15 19:19:13 kycl4rk Exp $
d3fad399 5# -------------------------------------------------------------------
6# Copyright (C) 2003 darren chamberlain <darren@cpan.org>,
6785b14e 7# Ken Y. Clark <kclark@cpan.org>.
d3fad399 8#
9# This program is free software; you can redistribute it and/or
10# modify it under the terms of the GNU General Public License as
11# published by the Free Software Foundation; version 2.
12#
13# This program is distributed in the hope that it will be useful, but
14# WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16# General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21# 02111-1307 USA
22# -------------------------------------------------------------------
23
75c75c55 24=head1 NAME
25
26SQL::Translator::Producer::YAML - A YAML producer for SQL::Translator
27
28=head1 SYNOPSIS
29
30 use SQL::Translator;
31
32 my $translator = SQL::Translator->new;
33 $translator->producer('YAML');
34
35=head1 DESCRIPTION
36
37This module uses YAML to serialize a schema to a string so that it
38can be saved to disk. Serializing a schema and then calling producers
39on the stored can realize significant performance gains when parsing
40takes a long time.
41
42=cut
43
d3fad399 44use strict;
45use vars qw($VERSION);
75c75c55 46$VERSION = sprintf "%d.%02d", q$Revision: 1.5 $ =~ /(\d+)\.(\d+)/;
d3fad399 47
af53e4ec 48use YAML qw(Dump);
d3fad399 49
6785b14e 50# -------------------------------------------------------------------
d3fad399 51sub produce {
52 my $translator = shift;
53 my $schema = $translator->schema;
54
af53e4ec 55 return Dump({
56 schema => {
6785b14e 57 tables => {
58 map { ($_->name => view_table($_)) } $schema->get_tables,
59 },
60 views => {
61 map { ($_->name => view_view($_)) } $schema->get_views,
62 },
63 triggers => {
64 map { ($_->name => view_trigger($_)) } $schema->get_triggers,
65 },
66 procedures => {
67 map { ($_->name => view_procedure($_)) }
68 $schema->get_procedures,
69 },
af53e4ec 70 }
71 });
d3fad399 72}
73
6785b14e 74# -------------------------------------------------------------------
d3fad399 75sub view_table {
76 my $table = shift;
af53e4ec 77 my $name = $table->name;
d3fad399 78
af53e4ec 79 return {
6785b14e 80 'name' => $table->name,
81 'order' => $table->order,
82 'options' => $table->options || [],
83 'comments' => $table->comments || '',
84 'fields' => {
85 map { ($_->name => view_field($_)) } $table->get_fields
86 },
af53e4ec 87 };
d3fad399 88}
89
6785b14e 90# -------------------------------------------------------------------
d3fad399 91sub view_field {
92 my $field = shift;
93
af53e4ec 94 return {
37b15d8c 95 'order' => scalar $field->order,
96 'name' => scalar $field->name,
97 'data_type' => scalar $field->data_type,
98 'size' => [ $field->size ],
99 'default_value' => scalar $field->default_value,
100 'is_nullable' => scalar $field->is_nullable,
101 'is_primary_key' => scalar $field->is_primary_key,
102 'is_unique' => scalar $field->is_unique,
103 'extra' => { $field->extra },
af53e4ec 104 };
d3fad399 105}
106
6785b14e 107# -------------------------------------------------------------------
108sub view_procedure {
109 my $procedure = shift;
110
111 return {
112 'order' => scalar $procedure->order,
113 'name' => scalar $procedure->name,
114 'sql' => scalar $procedure->sql,
115 'parameters' => scalar $procedure->parameters,
116 'owner' => scalar $procedure->owner,
117 'comments' => scalar $procedure->comments,
118 };
119}
120
121# -------------------------------------------------------------------
122sub view_trigger {
123 my $trigger = shift;
124
125 return {
126 'order' => scalar $trigger->order,
127 'name' => scalar $trigger->name,
128 'perform_action_when' => scalar $trigger->perform_action_when,
129 'database_event' => scalar $trigger->database_event,
130 'fields' => scalar $trigger->fields,
131 'on_table' => scalar $trigger->on_table,
132 'action' => scalar $trigger->action,
133 };
134}
135
136# -------------------------------------------------------------------
137sub view_view {
138 my $view = shift;
139
140 return {
141 'order' => scalar $view->order,
142 'name' => scalar $view->name,
143 'sql' => scalar $view->sql,
144 'fields' => scalar $view->fields,
145 };
146}
147
af53e4ec 1481;
d3fad399 149
75c75c55 150# -------------------------------------------------------------------
d3fad399 151
75c75c55 152=head1 SEE ALSO
153
154SQL::Translator, YAML, http://www.yaml.org/.
6785b14e 155
156=head1 AUTHORS
157
158darren chamberlain E<lt>darren@cpan.orgE<gt>,
159Ken Y. Clark E<lt>kclark@cpan.orgE<gt>.
160
161=cut