Commit | Line | Data |
c87fe35d |
1 | package SQL::Translator::Producer; |
a832857f |
2 | use namespace::autoclean; |
c87fe35d |
3 | use Moose; |
a832857f |
4 | use MooseX::Types::Moose qw(Str); |
5 | use SQL::Translator::Types qw(Schema); |
6 | |
a832857f |
7 | has 'schema' => ( |
44547961 |
8 | isa => Schema, |
9 | is => 'rw', |
10 | required => 1 |
a832857f |
11 | ); |
12 | |
13 | sub produce { |
14 | my $self = shift; |
15 | my $schema = $self->schema; |
16 | |
44547961 |
17 | $self->_create_table($_) for values %{$schema->tables}; |
a832857f |
18 | } |
19 | |
20 | sub _create_table { |
21 | my $self = shift; |
22 | my $table = shift; |
23 | |
24 | my $no_comments = 0; |
25 | my $add_drop_table = 1; |
26 | my $sqlite_version = 0; |
27 | |
28 | my $create_table; |
44547961 |
29 | my (@column_defs, @index_defs, @constraint_defs); |
30 | |
31 | $create_table .= 'DROP TABLE ' . $table->name . ";\n" if $add_drop_table; |
32 | $create_table .= 'CREATE TABLE ' . $table->name . " (\n"; |
a832857f |
33 | |
44547961 |
34 | push @column_defs, $self->_create_column($_) for values %{$table->columns}; |
35 | $create_table .= join(",\n", map { ' ' . $_ } @column_defs ) . "\n)"; |
a832857f |
36 | print $create_table . "\n"; |
37 | } |
38 | |
44547961 |
39 | sub _create_column { |
40 | my $self = shift; |
41 | my $column = shift; |
42 | |
43 | my $column_def; |
44 | $column_def = $column->name . ' ' . $column->data_type; |
45 | $column_def .= '(' . $column->size . ')' if $column->size; |
46 | $column_def .= ' NOT NULL' unless $column->is_nullable; |
47 | $column_def; |
48 | } |
49 | |
a832857f |
50 | __PACKAGE__->meta->make_immutable; |
c87fe35d |
51 | |
52 | 1; |