Added the header to the change file.
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / YAML.pm
CommitLineData
d3fad399 1package SQL::Translator::Producer::YAML;
2
3# -------------------------------------------------------------------
62d773a5 4# $Id: YAML.pm,v 1.10 2004-03-29 10:20:03 grommit Exp $
d3fad399 5# -------------------------------------------------------------------
977651a5 6# Copyright (C) 2002-4 SQLFairy Authors
d3fad399 7#
8# This program is free software; you can redistribute it and/or
9# modify it under the terms of the GNU General Public License as
10# published by the Free Software Foundation; version 2.
11#
12# This program is distributed in the hope that it will be useful, but
13# WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15# General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program; if not, write to the Free Software
19# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20# 02111-1307 USA
21# -------------------------------------------------------------------
22
75c75c55 23=head1 NAME
24
25SQL::Translator::Producer::YAML - A YAML producer for SQL::Translator
26
27=head1 SYNOPSIS
28
29 use SQL::Translator;
30
c16f976a 31 my $translator = SQL::Translator->new(producer => 'YAML');
75c75c55 32
33=head1 DESCRIPTION
34
35This module uses YAML to serialize a schema to a string so that it
36can be saved to disk. Serializing a schema and then calling producers
37on the stored can realize significant performance gains when parsing
38takes a long time.
39
40=cut
41
d3fad399 42use strict;
43use vars qw($VERSION);
62d773a5 44$VERSION = sprintf "%d.%02d", q$Revision: 1.10 $ =~ /(\d+)\.(\d+)/;
d3fad399 45
af53e4ec 46use YAML qw(Dump);
d3fad399 47
6785b14e 48# -------------------------------------------------------------------
d3fad399 49sub produce {
50 my $translator = shift;
51 my $schema = $translator->schema;
52
af53e4ec 53 return Dump({
54 schema => {
6785b14e 55 tables => {
c16f976a 56 map { ($_->name => view_table($_)) }
57 $schema->get_tables,
6785b14e 58 },
59 views => {
c16f976a 60 map { ($_->name => view_view($_)) }
61 $schema->get_views,
6785b14e 62 },
63 triggers => {
c16f976a 64 map { ($_->name => view_trigger($_)) }
65 $schema->get_triggers,
6785b14e 66 },
67 procedures => {
68 map { ($_->name => view_procedure($_)) }
c16f976a 69 $schema->get_procedures,
6785b14e 70 },
25a2e5c6 71 },
72 translator => {
73 add_drop_table => $translator->add_drop_table,
74 filename => $translator->filename,
75 no_comments => $translator->no_comments,
76 parser_args => $translator->parser_args,
77 producer_args => $translator->producer_args,
78 parser_type => $translator->parser_type,
79 producer_type => $translator->producer_type,
80 show_warnings => $translator->show_warnings,
81 trace => $translator->trace,
82 version => $translator->version,
af53e4ec 83 }
84 });
d3fad399 85}
86
6785b14e 87# -------------------------------------------------------------------
d3fad399 88sub view_table {
89 my $table = shift;
90
af53e4ec 91 return {
b3d280e2 92 'name' => $table->name,
93 'order' => $table->order,
94 'options' => $table->options || [],
95 'comments' => $table->comments || '',
96 'constraints' => [
97 map { view_constraint($_) } $table->get_constraints
98 ],
99 'indices' => [
100 map { view_index($_) } $table->get_indices
101 ],
102 'fields' => {
c16f976a 103 map { ($_->name => view_field($_)) }
104 $table->get_fields
6785b14e 105 },
af53e4ec 106 };
d3fad399 107}
108
6785b14e 109# -------------------------------------------------------------------
b3d280e2 110sub view_constraint {
111 my $constraint = shift;
112
113 return {
114 'deferrable' => scalar $constraint->deferrable,
115 'expression' => scalar $constraint->expression,
62d773a5 116 'fields' => scalar $constraint->field_names,
b3d280e2 117 'match_type' => scalar $constraint->match_type,
118 'name' => scalar $constraint->name,
119 'options' => scalar $constraint->options,
120 'on_delete' => scalar $constraint->on_delete,
121 'on_update' => scalar $constraint->on_update,
122 'reference_fields' => scalar $constraint->reference_fields,
123 'reference_table' => scalar $constraint->reference_table,
124 'type' => scalar $constraint->type,
125 };
126}
127
128# -------------------------------------------------------------------
d3fad399 129sub view_field {
130 my $field = shift;
131
af53e4ec 132 return {
37b15d8c 133 'order' => scalar $field->order,
134 'name' => scalar $field->name,
135 'data_type' => scalar $field->data_type,
136 'size' => [ $field->size ],
137 'default_value' => scalar $field->default_value,
138 'is_nullable' => scalar $field->is_nullable,
139 'is_primary_key' => scalar $field->is_primary_key,
140 'is_unique' => scalar $field->is_unique,
141 'extra' => { $field->extra },
af53e4ec 142 };
d3fad399 143}
144
6785b14e 145# -------------------------------------------------------------------
146sub view_procedure {
147 my $procedure = shift;
148
149 return {
150 'order' => scalar $procedure->order,
151 'name' => scalar $procedure->name,
152 'sql' => scalar $procedure->sql,
153 'parameters' => scalar $procedure->parameters,
154 'owner' => scalar $procedure->owner,
155 'comments' => scalar $procedure->comments,
156 };
157}
158
159# -------------------------------------------------------------------
160sub view_trigger {
161 my $trigger = shift;
162
163 return {
164 'order' => scalar $trigger->order,
165 'name' => scalar $trigger->name,
166 'perform_action_when' => scalar $trigger->perform_action_when,
167 'database_event' => scalar $trigger->database_event,
168 'fields' => scalar $trigger->fields,
169 'on_table' => scalar $trigger->on_table,
170 'action' => scalar $trigger->action,
171 };
172}
173
174# -------------------------------------------------------------------
175sub view_view {
176 my $view = shift;
177
178 return {
179 'order' => scalar $view->order,
180 'name' => scalar $view->name,
181 'sql' => scalar $view->sql,
182 'fields' => scalar $view->fields,
183 };
184}
185
c16f976a 186# -------------------------------------------------------------------
187sub view_index {
188 my $index = shift;
189
190 return {
191 'name' => scalar $index->name,
192 'type' => scalar $index->type,
193 'fields' => scalar $index->fields,
194 'options' => scalar $index->options,
195 };
196}
197
af53e4ec 1981;
d3fad399 199
75c75c55 200# -------------------------------------------------------------------
d3fad399 201
75c75c55 202=head1 SEE ALSO
203
204SQL::Translator, YAML, http://www.yaml.org/.
6785b14e 205
206=head1 AUTHORS
207
208darren chamberlain E<lt>darren@cpan.orgE<gt>,
209Ken Y. Clark E<lt>kclark@cpan.orgE<gt>.
210
211=cut