add drop_table and no_comments attributes
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Producer / SQLite.pm
CommitLineData
7e179591 1package SQL::Translator::Producer::SQLite;
2use namespace::autoclean;
3use Moose::Role;
053fd7e5 4use SQL::Translator::Constants qw(:sqlt_types);
5
6my %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 15sub _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
35sub _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 551;