fix list of numeric types for SQLite
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Generator / DDL / SQLite.pm
1 package SQL::Translator::Generator::DDL::SQLite;
2
3 # AUTHOR: Arthur Axel fREW Schmidt
4 # Copyright: Same as Perl 5
5
6 use Moo;
7 use SQL::Translator::Generator::Utils;
8
9 has quote_chars => (is=>'ro', default=>sub { +[qw(" ")] } );
10
11 with 'SQL::Translator::Generator::Role::Quote';
12 with 'SQL::Translator::Generator::Role::DDL';
13
14 sub name_sep { q(.) }
15
16 sub _build_type_map {
17    +{
18       date => 'datetime',
19       'time' => 'datetime',
20    }
21 }
22
23 sub _build_sizeless_types { +{ text => 1 } }
24 sub _build_numeric_types {
25    +{
26       int                => 1,
27       integer            => 1,
28       tinyint            => 1,
29       smallint           => 1,
30       mediumint          => 1,
31       bigint             => 1,
32       'unsigned big int' => 1,
33       int2               => 1,
34       int8               => 1,
35       numeric            => 1,
36       decimal            => 1,
37       boolean            => 1,
38       real               => 1,
39       double             => 1,
40       'double precision' => 1,
41       float              => 1,
42    }
43 }
44
45 sub _build_unquoted_defaults {
46    +{
47        NULL              => 1,
48        'now()'           => 1,
49        CURRENT_TIMESTAMP => 1,
50    }
51 }
52
53 sub nullable { () }
54
55 sub _ipk {
56    my ($self, $field) = @_;
57
58    my $pk = $field->table->primary_key;
59    my @pk_fields = $pk ? $pk->fields : ();
60
61    $field->is_primary_key && scalar @pk_fields == 1 &&
62    ( $field->data_type =~ /int(eger)?$/i
63     ||
64    ( $field->data_type =~ /^number?$/i && $field->size !~ /,/ ) )
65 }
66
67 sub field {
68    my ($self, $field) = @_;
69
70
71    return join ' ',
72       $self->field_comments($field),
73       $self->field_name($field),
74       ( $self->_ipk($field)
75          ? ( 'INTEGER PRIMARY KEY' )
76          : ( $self->field_type($field) )
77       ),
78       $self->field_nullable($field),
79       $self->field_default($field),
80 }
81
82 1;
83