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'; |
f699ffaa |
7 | requires '_build_numeric_types'; |
8 | requires '_build_unquoted_defaults'; |
1ea76bff |
9 | requires 'field_type_size'; |
10 | |
11 | has shim => ( |
12 | is => 'ro', |
38d0ddf0 |
13 | handles => [ 'quote' ], |
1ea76bff |
14 | builder => '_build_shim', |
15 | ); |
16 | |
17 | has type_map => ( |
18 | is => 'ro', |
19 | builder => '_build_type_map', |
20 | ); |
21 | |
f699ffaa |
22 | has numeric_types => ( |
23 | is => 'ro', |
24 | builder => '_build_numeric_types', |
25 | ); |
26 | |
27 | has 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 |
34 | sub field_name { $_[0]->quote($_[1]->name) } |
1ea76bff |
35 | |
f699ffaa |
36 | sub field_comments { |
37 | ( $_[1]->comments ? ('-- ' . $_[1]->comments . "\n ") : () ) |
38 | } |
39 | |
40 | sub field_nullable { ($_[1]->is_nullable ? $_[0]->nullable : 'NOT NULL' ) } |
1ea76bff |
41 | |
42 | sub 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 | |
50 | sub 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 | |
f699ffaa |
57 | sub nullable { 'NULL' } |
58 | |
1ea76bff |
59 | 1; |