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