refactor table into more methods
[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',
38d0ddf0 13 handles => [ 'quote' ],
1ea76bff 14 builder => '_build_shim',
15);
16
17has type_map => (
18 is => 'ro',
19 builder => '_build_type_map',
20);
21
f699ffaa 22has numeric_types => (
23 is => 'ro',
24 builder => '_build_numeric_types',
25);
26
27has unquoted_defaults => (
28 is => 'ro',
29 builder => '_build_unquoted_defaults',
30);
31
1ea76bff 32# would also be handy to have a required size set if there is such a thing
33
38d0ddf0 34sub field_name { $_[0]->quote($_[1]->name) }
1ea76bff 35
f699ffaa 36sub field_comments {
37 ( $_[1]->comments ? ('-- ' . $_[1]->comments . "\n ") : () )
38}
39
40sub field_nullable { ($_[1]->is_nullable ? $_[0]->nullable : 'NOT NULL' ) }
1ea76bff 41
42sub field_default {
f699ffaa 43 return () if !defined $_[1]->default_value;
44
45 my $val = $_[1]->default_value;
46 $val = "'$val'" unless $_[0]->numeric_types->{$_[1]->data_type};
47 return ( "DEFAULT $val" )
1ea76bff 48}
49
50sub field_type {
51 my ($self, $field) = @_;
52
53 my $field_type = $field->data_type;
54 ($self->type_map->{$field_type} || $field_type).$self->field_type_size($field)
55}
56
2ce8cf9b 57sub fields {
58 my ($self, $table) = @_;
59 ( map $self->field($_), $table->get_fields )
60}
61
f699ffaa 62sub nullable { 'NULL' }
63
1ea76bff 641;