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