use Digest::SHA1 for sha1_hex
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Producer.pm
CommitLineData
4f4fd192 1use MooseX::Declare;
2class SQL::Translator::Producer {
a5c5cd44 3 use SQL::Translator::Constants qw(:sqlt_types);
4 use MooseX::Types::Moose qw(Bool HashRef Str);
362da5e9 5 use SQL::Translator::Types qw(Column Table Translator);
4f4fd192 6
a5c5cd44 7 has 'data_type_mapping' => (
8 isa => HashRef,
9 is => 'ro',
10 lazy_build => 1
11 );
12
362da5e9 13 has 'translator' => (
14 isa => Translator,
15 is => 'ro',
16 weak_ref => 1,
17 required => 1,
18 handles => [ qw(schema) ],
19 );
20
a5c5cd44 21 method _build_data_type_mapping {
22 return {
23 SQL_LONGVARCHAR() => 'text',
24 SQL_TIMESTAMP() => 'timestamp',
25 SQL_TYPE_TIMESTAMP() => 'timestamp without time zone',
26 SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() => 'timestamp',
27 SQL_INTEGER() => 'integer',
2eee6789 28 SQL_CHAR() => 'char',
a5c5cd44 29 SQL_VARCHAR() => 'varchar',
30 SQL_BIGINT() => 'bigint',
31 SQL_FLOAT() => 'numeric',
32 };
33 }
34
4f4fd192 35 method produce {
36 my $schema = $self->schema;
362da5e9 37
4f4fd192 38 $self->_create_table($_) for values %{$schema->tables};
39 }
40
41 method _create_table(Table $table) {
42 my $no_comments = 0;
43 my $add_drop_table = 1;
44 my $sqlite_version = 0;
45
46 my $create_table;
47 my (@column_defs, @index_defs, @constraint_defs);
48
49 $create_table .= 'DROP TABLE ' . $table->name . ";\n" if $add_drop_table;
50 $create_table .= 'CREATE TABLE ' . $table->name . " (\n";
51
52 push @column_defs, $self->_create_column($_) for values %{$table->columns};
53 $create_table .= join(",\n", map { ' ' . $_ } @column_defs ) . "\n)";
54 print $create_table . "\n";
55 }
56
57 method _create_column(Column $column) {
58 my $column_def;
59 $column_def = $column->name . ' ' . $column->data_type;
60 $column_def .= '(' . $column->size . ')' if $column->size;
61 $column_def .= ' NOT NULL' unless $column->is_nullable;
62 $column_def;
63 }
a832857f 64}