Default SQLite quoting to off until we are capable of disabling it everywhere
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Generator / DDL / SQLite.pm
1 package SQL::Translator::Generator::DDL::SQLite;
2
3 use Moo;
4 use SQL::Translator::Generator::Utils;
5
6 has quote_chars => (is=>'ro', default=>sub { +[qw(" ")] } );
7
8 with 'SQL::Translator::Generator::Role::Quote';
9 with 'SQL::Translator::Generator::Role::DDL';
10
11 sub name_sep { q(.) }
12
13 sub _build_type_map {
14    +{
15       date => 'datetime',
16       'time' => 'datetime',
17    }
18 }
19
20 sub _build_sizeless_types { +{ text => 1 } }
21 sub _build_numeric_types { +{ int => 1, tinyint => 1 } }
22
23 sub _build_unquoted_defaults {
24    +{
25        NULL              => 1,
26        'now()'           => 1,
27        CURRENT_TIMESTAMP => 1,
28    }
29 }
30
31 sub nullable { () }
32
33 sub _ipk {
34    my ($self, $field) = @_;
35
36    my $pk = $field->table->primary_key;
37    my @pk_fields = $pk ? $pk->fields : ();
38
39    $field->is_primary_key && scalar @pk_fields == 1 &&
40    ( $field->data_type =~ /int(eger)?$/i
41     ||
42    ( $field->data_type =~ /^number?$/i && $field->size !~ /,/ ) )
43 }
44
45 sub field {
46    my ($self, $field) = @_;
47
48
49    return join ' ',
50       $self->field_comments($field),
51       $self->field_name($field),
52       ( $self->_ipk($field)
53          ? ( 'INTEGER PRIMARY KEY' )
54          : ( $self->field_type($field) )
55       ),
56       $self->field_nullable($field),
57       $self->field_default($field),
58 }
59
60 1;
61