add drop_table and no_comments attributes
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Producer / SQLite.pm
1 package SQL::Translator::Producer::SQLite;
2 use namespace::autoclean;
3 use Moose::Role;
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',
12     SQL_BIGINT()      => 'integer',
13 );
14
15 sub _create_table {
16     my $self = shift;
17     my $table = shift;
18
19     my $no_comments    = $self->no_comments;
20     my $sqlite_version = 0;
21
22     my $create_table;
23     my (@create, @column_defs, @index_defs, @constraint_defs);
24
25     $create_table .= 'DROP TABLE '   . $table->name . ";\n" if $self->drop_table;
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
31     print $create_table . ";\n";
32     return (@create, $create_table, @index_defs, @constraint_defs );
33 }
34
35 sub _create_column {
36     my $self = shift;
37     my $column = shift;
38
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;
42
43     my $column_def;
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;
49     $column_def .= ' NOT NULL' unless $column->is_nullable;
50     $column_def .= ' PRIMARY KEY' if $column->is_auto_increment;
51     $column_def .= ' DEFAULT ' . $default_value if $column->default_value && !$column->is_auto_increment;
52     $column_def;
53 }
54
55 1;