2 class SQL::Translator::Producer {
3 use SQL::Translator::Constants qw(:sqlt_types);
4 use MooseX::Types::Moose qw(Bool HashRef Str);
5 use SQL::Translator::Types qw(Column Table Translator);
21 has 'data_type_mapping' => (
32 handles => [ qw(schema) ],
35 method _build_data_type_mapping {
37 SQL_LONGVARCHAR() => 'text',
38 SQL_TIMESTAMP() => 'timestamp',
39 SQL_TYPE_TIMESTAMP() => 'timestamp without time zone',
40 SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() => 'timestamp',
41 SQL_INTEGER() => 'integer',
43 SQL_VARCHAR() => 'varchar',
44 SQL_BIGINT() => 'bigint',
45 SQL_FLOAT() => 'numeric',
50 my $schema = $self->schema;
52 $self->_create_table($_) for values %{$schema->tables};
55 method _create_table(Table $table) {
57 my $add_drop_table = 1;
58 my $sqlite_version = 0;
61 my (@column_defs, @index_defs, @constraint_defs);
63 $create_table .= 'DROP TABLE ' . $table->name . ";\n" if $add_drop_table;
64 $create_table .= 'CREATE TABLE ' . $table->name . " (\n";
66 push @column_defs, $self->_create_column($_) for values %{$table->columns};
67 $create_table .= join(",\n", map { ' ' . $_ } @column_defs ) . "\n)";
68 print $create_table . "\n";
71 method _create_column(Column $column) {
73 $column_def = $column->name . ' ' . $column->data_type;
74 $column_def .= '(' . $column->size . ')' if $column->size;
75 $column_def .= ' NOT NULL' unless $column->is_nullable;