Fix broken plan
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Generator / Role / DDL.pm
CommitLineData
1ea76bff 1package SQL::Translator::Generator::Role::DDL;
2
3use Moo::Role;
507693db 4use SQL::Translator::Utils qw(header_comment);
1ea76bff 5
1ea76bff 6requires '_build_type_map';
f699ffaa 7requires '_build_numeric_types';
8requires '_build_unquoted_defaults';
4b10273f 9requires '_build_sizeless_types';
39bfaa8b 10requires 'quote';
1ea76bff 11
12has type_map => (
28f1fad7 13 is => 'lazy',
1ea76bff 14);
15
f699ffaa 16has numeric_types => (
28f1fad7 17 is => 'lazy',
f699ffaa 18);
19
4b10273f 20has sizeless_types => (
21 is => 'lazy',
22);
23
f699ffaa 24has unquoted_defaults => (
28f1fad7 25 is => 'lazy',
f699ffaa 26);
27
f9356e0d 28has add_comments => (
29 is => 'ro',
30);
31
32has add_drop_table => (
33 is => 'ro',
34);
35
1ea76bff 36# would also be handy to have a required size set if there is such a thing
37
38d0ddf0 38sub field_name { $_[0]->quote($_[1]->name) }
1ea76bff 39
f699ffaa 40sub field_comments {
41 ( $_[1]->comments ? ('-- ' . $_[1]->comments . "\n ") : () )
42}
43
f511a415 44sub table_comments {
45 my ($self, $table) = @_;
46 if ($self->add_comments) {
47 return (
9a6c1bf9 48 "",
49 "--",
50 "-- Table: " . $self->quote($table->name) . "",
51 "--",
52 map "-- $_", $table->comments
f511a415 53 )
54 } else {
55 return ()
56 }
57}
58
f699ffaa 59sub field_nullable { ($_[1]->is_nullable ? $_[0]->nullable : 'NOT NULL' ) }
1ea76bff 60
61sub field_default {
f699ffaa 62 return () if !defined $_[1]->default_value;
63
64 my $val = $_[1]->default_value;
65 $val = "'$val'" unless $_[0]->numeric_types->{$_[1]->data_type};
66 return ( "DEFAULT $val" )
1ea76bff 67}
68
69sub field_type {
70 my ($self, $field) = @_;
71
72 my $field_type = $field->data_type;
73 ($self->type_map->{$field_type} || $field_type).$self->field_type_size($field)
74}
75
4b10273f 76sub field_type_size {
77 my ($self, $field) = @_;
78
79 ($field->size && !$self->sizeless_types->{$field->data_type}
80 ? '(' . $field->size . ')'
81 : ''
82 )
83}
84
2ce8cf9b 85sub fields {
86 my ($self, $table) = @_;
87 ( map $self->field($_), $table->get_fields )
88}
89
3f9e80bf 90sub indices {
91 my ($self, $table) = @_;
92 (map $self->index($_), $table->get_indices)
93}
94
f699ffaa 95sub nullable { 'NULL' }
96
507693db 97sub header_comments { header_comment() . "\n" if $_[0]->add_comments }
98
1ea76bff 991;