add comments, better default handling
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Generator / Role / DDL.pm
CommitLineData
1ea76bff 1package SQL::Translator::Generator::Role::DDL;
2
3use Moo::Role;
4
5requires '_build_shim';
6requires '_build_type_map';
f699ffaa 7requires '_build_numeric_types';
8requires '_build_unquoted_defaults';
1ea76bff 9requires 'field_type_size';
10
11has shim => (
12 is => 'ro',
13 builder => '_build_shim',
14);
15
16has type_map => (
17 is => 'ro',
18 builder => '_build_type_map',
19);
20
f699ffaa 21has numeric_types => (
22 is => 'ro',
23 builder => '_build_numeric_types',
24);
25
26has unquoted_defaults => (
27 is => 'ro',
28 builder => '_build_unquoted_defaults',
29);
30
1ea76bff 31# would also be handy to have a required size set if there is such a thing
32
33sub field_name { $_[0]->shim->quote($_[1]->name) }
34
f699ffaa 35sub field_comments {
36 ( $_[1]->comments ? ('-- ' . $_[1]->comments . "\n ") : () )
37}
38
39sub field_nullable { ($_[1]->is_nullable ? $_[0]->nullable : 'NOT NULL' ) }
1ea76bff 40
41sub field_default {
f699ffaa 42 return () if !defined $_[1]->default_value;
43
44 my $val = $_[1]->default_value;
45 $val = "'$val'" unless $_[0]->numeric_types->{$_[1]->data_type};
46 return ( "DEFAULT $val" )
1ea76bff 47}
48
49sub field_type {
50 my ($self, $field) = @_;
51
52 my $field_type = $field->data_type;
53 ($self->type_map->{$field_type} || $field_type).$self->field_type_size($field)
54}
55
f699ffaa 56sub nullable { 'NULL' }
57
1ea76bff 581;