This seems to no longer be used anywhere...?
[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
8 has quote_chars => (is=>'ro', default=>sub { +[qw(" ")] } );
9
10 with 'SQL::Translator::Generator::Role::Quote';
11 with 'SQL::Translator::Generator::Role::DDL';
12
13 sub name_sep { q(.) }
14
15 sub _build_type_map {
16    +{
17       set   => 'varchar',
18       bytea => 'blob',
19    }
20 }
21
22 sub _build_sizeless_types {
23    +{
24       text => 1,
25       blob => 1,
26    }
27 }
28 sub _build_numeric_types {
29    +{
30       int                => 1,
31       integer            => 1,
32       tinyint            => 1,
33       smallint           => 1,
34       mediumint          => 1,
35       bigint             => 1,
36       'unsigned big int' => 1,
37       int2               => 1,
38       int8               => 1,
39       numeric            => 1,
40       decimal            => 1,
41       boolean            => 1,
42       real               => 1,
43       double             => 1,
44       'double precision' => 1,
45       float              => 1,
46    }
47 }
48
49 sub _build_unquoted_defaults {
50    +{
51        NULL              => 1,
52        'now()'           => 1,
53        CURRENT_TIMESTAMP => 1,
54    }
55 }
56
57 sub nullable { () }
58
59 sub _ipk {
60    my ($self, $field) = @_;
61
62    my $pk = $field->table->primary_key;
63    my @pk_fields = $pk ? $pk->fields : ();
64
65    $field->is_primary_key && scalar @pk_fields == 1 &&
66    ( $field->data_type =~ /int(eger)?$/i
67     ||
68    ( $field->data_type =~ /^number?$/i && $field->size !~ /,/ ) )
69 }
70
71 sub field {
72    my ($self, $field) = @_;
73
74
75    return join ' ',
76       $self->field_comments($field),
77       $self->field_name($field),
78       ( $self->_ipk($field)
79          ? ( 'INTEGER PRIMARY KEY' )
80          : ( $self->field_type($field) )
81       ),
82       $self->field_nullable($field),
83       $self->field_default($field, {
84          NULL => 1,
85          'now()' => 1,
86          'CURRENT_TIMESTAMP' => 1,
87       }),
88 }
89
90 1;
91