65104681809c6344c79e840f942ef097fb2b0859
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Generator / Role / DDL.pm
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;