1 package SQL::Translator::Generator::Role::DDL;
3 # AUTHOR: Arthur Axel fREW Schmidt
4 # Copyright: Same as Perl 5
7 use SQL::Translator::Utils qw(header_comment);
9 requires '_build_type_map';
10 requires '_build_numeric_types';
11 requires '_build_unquoted_defaults';
12 requires '_build_sizeless_types';
19 has numeric_types => (
23 has sizeless_types => (
27 has unquoted_defaults => (
35 has add_drop_table => (
39 # would also be handy to have a required size set if there is such a thing
41 sub field_name { $_[0]->quote($_[1]->name) }
44 ( $_[1]->comments ? ('-- ' . $_[1]->comments . "\n ") : () )
48 my ($self, $table) = @_;
49 if ($self->add_comments) {
53 "-- Table: " . $self->quote($table->name) . "",
55 map "-- $_", $table->comments
62 sub field_nullable { ($_[1]->is_nullable ? $_[0]->nullable : 'NOT NULL' ) }
65 return () if !defined $_[1]->default_value;
67 my $val = $_[1]->default_value;
68 $val = "'$val'" unless $_[0]->numeric_types->{$_[1]->data_type};
69 return ( "DEFAULT $val" )
73 my ($self, $field) = @_;
75 my $field_type = $field->data_type;
76 ($self->type_map->{$field_type} || $field_type).$self->field_type_size($field)
80 my ($self, $field) = @_;
82 ($field->size && !$self->sizeless_types->{$field->data_type}
83 ? '(' . $field->size . ')'
89 my ($self, $table) = @_;
90 ( map $self->field($_), $table->get_fields )
94 my ($self, $table) = @_;
95 (map $self->index($_), $table->get_indices)
98 sub nullable { 'NULL' }
100 sub header_comments { header_comment() . "\n" if $_[0]->add_comments }