Commit | Line | Data |
a1552a5a |
1 | package SQL::Translator::Generator::DDL::SQLite; |
2 | |
3 | use Moo; |
4 | use SQL::Translator::Generator::Utils; |
5 | |
6 | with 'SQL::Translator::Generator::Role::DDL'; |
7 | |
8 | sub _build_shim { SQL::Translator::Generator::Utils->new( quote_chars => q(") ) } |
9 | |
10 | sub _build_type_map { |
11 | +{ |
12 | date => 'datetime', |
13 | 'time' => 'datetime', |
14 | } |
15 | } |
16 | |
17 | has sizeless_types => ( |
18 | is => 'ro', |
19 | builder => '_build_sizeless_types', |
20 | ); |
21 | |
22 | sub _build_sizeless_types { +{ text => 1 } } |
23 | sub _build_numeric_types { +{ int => 1, tinyint => 1 } } |
24 | |
25 | sub _build_unquoted_defaults { |
26 | +{ |
27 | NULL => 1, |
28 | 'now()' => 1, |
29 | CURRENT_TIMESTAMP => 1, |
30 | } |
31 | } |
32 | |
33 | sub nullable { () } |
34 | |
27df230e |
35 | sub _ipk { |
36 | my ($self, $field) = @_; |
37 | |
38 | my $pk = $field->table->primary_key; |
39 | my @pk_fields = $pk ? $pk->fields : (); |
40 | |
41 | $field->is_primary_key && scalar @pk_fields == 1 && |
42 | ( $field->data_type =~ /int(eger)?$/i |
43 | || |
44 | ( $field->data_type =~ /^number?$/i && $field->size !~ /,/ ) ) |
45 | } |
46 | |
a1552a5a |
47 | sub field { |
48 | my ($self, $field) = @_; |
49 | |
27df230e |
50 | |
a1552a5a |
51 | return join ' ', |
52 | $self->field_comments($field), |
53 | $self->field_name($field), |
27df230e |
54 | ( $self->_ipk($field) |
a1552a5a |
55 | ? ( 'INTEGER PRIMARY KEY' ) |
56 | : ( $self->field_type($field) ) |
57 | ), |
58 | $self->field_nullable($field), |
59 | $self->field_default($field), |
60 | } |
61 | |
62 | sub field_type_size { |
63 | my ($self, $field) = @_; |
64 | |
65 | ($field->size && !$self->sizeless_types->{$field->data_type} |
66 | ? '(' . $field->size . ')' |
67 | : '' |
68 | ) |
69 | } |
70 | |
a1552a5a |
71 | 1; |
72 | |