Commit | Line | Data |
7e179591 |
1 | package SQL::Translator::Producer::SQLite; |
2 | use namespace::autoclean; |
3 | use Moose::Role; |
053fd7e5 |
4 | use SQL::Translator::Constants qw(:sqlt_types); |
5 | |
6 | my %data_type_mapping = ( |
7 | SQL_LONGVARCHAR() => 'text', |
8 | SQL_TIMESTAMP() => 'timestamp', |
9 | SQL_INTEGER() => 'integer', |
10 | SQL_CHAR() => 'character', |
11 | SQL_VARCHAR() => 'varchar', |
169f1642 |
12 | SQL_BIGINT() => 'integer', |
053fd7e5 |
13 | ); |
7e179591 |
14 | |
44547961 |
15 | sub _create_table { |
16 | my $self = shift; |
17 | my $table = shift; |
18 | |
672dfd6b |
19 | my $no_comments = $self->no_comments; |
44547961 |
20 | my $sqlite_version = 0; |
21 | |
22 | my $create_table; |
23 | my (@create, @column_defs, @index_defs, @constraint_defs); |
24 | |
672dfd6b |
25 | $create_table .= 'DROP TABLE ' . $table->name . ";\n" if $self->drop_table; |
44547961 |
26 | $create_table .= 'CREATE TABLE ' . $table->name . " (\n"; |
27 | |
28 | push @column_defs, $self->_create_column($_) for values %{$table->columns}; |
29 | $create_table .= join(",\n", map { ' ' . $_ } @column_defs ) . "\n)"; |
30 | |
053fd7e5 |
31 | print $create_table . ";\n"; |
44547961 |
32 | return (@create, $create_table, @index_defs, @constraint_defs ); |
33 | } |
34 | |
35 | sub _create_column { |
36 | my $self = shift; |
37 | my $column = shift; |
38 | |
053fd7e5 |
39 | my $size = $column->data_type == SQL_TIMESTAMP() ? undef : $column->size; |
40 | my $default_value = $column->default_value; |
41 | $default_value =~ s/^now[()]*/CURRENT_TIMESTAMP/i if $default_value; |
44547961 |
42 | |
43 | my $column_def; |
053fd7e5 |
44 | $column_def = $column->name . ' '; |
45 | $column_def .= defined $data_type_mapping{$column->data_type} |
46 | ? $data_type_mapping{$column->data_type} |
47 | : $column->data_type; |
48 | #$column_def .= '(' . $column->size . ')' if $size; |
44547961 |
49 | $column_def .= ' NOT NULL' unless $column->is_nullable; |
053fd7e5 |
50 | $column_def .= ' PRIMARY KEY' if $column->is_auto_increment; |
51 | $column_def .= ' DEFAULT ' . $default_value if $column->default_value && !$column->is_auto_increment; |
44547961 |
52 | $column_def; |
53 | } |
54 | |
7e179591 |
55 | 1; |