Commit | Line | Data |
1ea76bff |
1 | package SQL::Translator::Generator::Role::DDL; |
2 | |
3 | use Moo::Role; |
4 | |
5 | requires '_build_shim'; |
6 | requires '_build_type_map'; |
7 | requires 'field_type_size'; |
8 | |
9 | has shim => ( |
10 | is => 'ro', |
11 | builder => '_build_shim', |
12 | ); |
13 | |
14 | has type_map => ( |
15 | is => 'ro', |
16 | builder => '_build_type_map', |
17 | ); |
18 | |
19 | # would also be handy to have a required size set if there is such a thing |
20 | |
21 | sub field_name { $_[0]->shim->quote($_[1]->name) } |
22 | |
23 | sub field_nullable { ($_[1]->is_nullable ? 'NULL' : 'NOT NULL' ) } |
24 | |
25 | sub field_default { |
26 | (defined $_[1]->default_value ? 'DEFAULT ' . q(') . $_[1]->default_value . q(') : () ) |
27 | } |
28 | |
29 | sub field_type { |
30 | my ($self, $field) = @_; |
31 | |
32 | my $field_type = $field->data_type; |
33 | ($self->type_map->{$field_type} || $field_type).$self->field_type_size($field) |
34 | } |
35 | |
36 | 1; |