Commit | Line | Data |
cac60624 |
1 | use MooseX::Declare; |
2 | role SQL::Translator::Producer::YAML { |
510dbe0f |
3 | use YAML qw(Dump); |
4 | use SQL::Translator::Types qw(Column Constraint Index Procedure Table Trigger View); |
5 | |
6 | method produce { |
7 | my $schema = $self->schema; |
8 | my $translator = $self->translator; |
9 | |
10 | return Dump({ |
11 | schema => { |
12 | tables => { map { ($_->name => $self->_create_table($_)) } $schema->get_tables, }, |
13 | views => { map { ($_->name => $self->_create_view($_)) } $schema->get_views, }, |
14 | triggers => { map { ($_->name => $self->_create_trigger($_)) } $schema->get_triggers, }, |
15 | procedures => { map { ($_->name => $self->_create_procedure($_)) } $schema->get_procedures, }, |
cac60624 |
16 | }, |
510dbe0f |
17 | translator => { |
18 | add_drop_table => $translator->add_drop_table, |
19 | filename => $translator->filename, |
20 | no_comments => $translator->no_comments, |
21 | parser_args => $translator->parser_args, |
22 | producer_args => $translator->producer_args, |
23 | parser_type => $translator->parser_type, |
24 | producer_type => $translator->producer_type, |
25 | show_warnings => $translator->show_warnings, |
26 | trace => $translator->trace, |
27 | version => $translator->version, |
cac60624 |
28 | }, |
510dbe0f |
29 | # keys %{$schema->extra} ? ('extra' => { $schema->extra } ) : (), |
30 | }); |
31 | } |
32 | |
33 | method _create_table(Table $table) { |
34 | return { |
35 | 'name' => $table->name, |
36 | # 'order' => $table->order, |
37 | 'options' => $table->options || [], |
38 | $table->comments ? ('comments' => $table->comments ) : (), |
39 | 'constraints' => [ map { $self->_create_constraint($_) } $table->get_constraints ], |
40 | 'indices' => [ map { $self->_create_index($_) } $table->get_indices ], |
41 | 'fields' => { map { ($_->name => $self->_create_field($_)) } $table->get_fields |
cac60624 |
42 | }, |
510dbe0f |
43 | #keys %{$table->extra} ? ('extra' => { $table->extra } ) : (), |
44 | }; |
45 | } |
46 | |
47 | method _create_constraint(Constraint $constraint) { |
48 | return { |
49 | 'deferrable' => scalar $constraint->deferrable, |
50 | 'expression' => scalar $constraint->expression, |
efdd470e |
51 | 'fields' => [ $constraint->fields ], |
510dbe0f |
52 | 'match_type' => scalar $constraint->match_type, |
53 | 'name' => scalar $constraint->name, |
54 | 'options' => scalar $constraint->options, |
55 | # 'on_delete' => scalar $constraint->on_delete, |
56 | # 'on_update' => scalar $constraint->on_update, |
efdd470e |
57 | 'reference_fields' => [ map { ref $_ ? $_->name : $_ } $constraint->reference_fields ], |
58 | 'reference_table' => scalar $constraint->reference_table, |
510dbe0f |
59 | 'type' => scalar $constraint->type, |
60 | #keys %{$constraint->extra} ? ('extra' => { $constraint->extra } ) : (), |
61 | }; |
62 | } |
63 | |
64 | method _create_field(Column $field) { |
65 | return { |
66 | # 'order' => scalar $field->order, |
67 | 'name' => scalar $field->name, |
68 | 'data_type' => scalar $field->data_type, |
69 | 'size' => [ $field->size ], |
70 | 'default_value' => scalar $field->default_value, |
71 | 'is_nullable' => scalar $field->is_nullable, |
72 | 'is_primary_key' => scalar $field->is_primary_key, |
73 | 'is_unique' => scalar $field->is_unique, |
74 | $field->is_auto_increment ? ('is_auto_increment' => 1) : (), |
75 | $field->comments ? ('comments' => $field->comments) : (), |
76 | #keys %{$field->extra} ? ('extra' => { $field->extra } ) : (), |
77 | }; |
78 | } |
79 | |
80 | method _create_procedure(Procedure $procedure) { |
81 | return { |
82 | # 'order' => scalar $procedure->order, |
83 | 'name' => scalar $procedure->name, |
84 | 'sql' => scalar $procedure->sql, |
85 | 'parameters' => scalar $procedure->parameters, |
86 | 'owner' => scalar $procedure->owner, |
87 | 'comments' => scalar $procedure->comments, |
88 | #keys %{$procedure->extra} ? ('extra' => { $procedure->extra } ) : (), |
89 | }; |
90 | } |
91 | |
92 | method _create_trigger(Trigger $trigger) { |
93 | return { |
94 | # 'order' => scalar $trigger->order, |
95 | 'name' => scalar $trigger->name, |
96 | 'perform_action_when' => scalar $trigger->perform_action_when, |
97 | 'database_events' => scalar $trigger->database_events, |
efdd470e |
98 | 'fields' => [ $trigger->fields ], |
510dbe0f |
99 | 'on_table' => scalar $trigger->on_table, |
100 | 'action' => scalar $trigger->action, |
101 | #keys %{$trigger->extra} ? ('extra' => { $trigger->extra } ) : (), |
102 | }; |
103 | } |
104 | |
105 | method _create_view(View $view) { |
106 | return { |
107 | # 'order' => scalar $view->order, |
108 | 'name' => scalar $view->name, |
109 | 'sql' => scalar $view->sql, |
efdd470e |
110 | 'fields' => [ $view->fields ], |
510dbe0f |
111 | #keys %{$view->extra} ? ('extra' => { $view->extra } ) : (), |
112 | }; |
113 | } |
114 | |
115 | method _create_index(Index $index) { |
116 | return { |
117 | 'name' => scalar $index->name, |
118 | 'type' => scalar $index->type, |
efdd470e |
119 | 'fields' => [ $index->fields ], |
510dbe0f |
120 | 'options' => scalar $index->options, |
121 | #keys %{$index->extra} ? ('extra' => { $index->extra } ) : (), |
122 | }; |
123 | } |
cac60624 |
124 | } |