X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser%2FDDL%2FYAML.pm;h=74b28cc785a6d630796e85230661a0061cf2d534;hb=72884995c859dd41f5cff5a4d4d4ce455c0c8ab8;hp=7a39fc09355c9e53f7953f2be81dcadb3bf6b75b;hpb=a69b5060fef1fc6dd183757290b5d4b4f5ccfc9c;p=dbsrgits%2FSQL-Translator-2.0-ish.git diff --git a/lib/SQL/Translator/Parser/DDL/YAML.pm b/lib/SQL/Translator/Parser/DDL/YAML.pm index 7a39fc0..74b28cc 100644 --- a/lib/SQL/Translator/Parser/DDL/YAML.pm +++ b/lib/SQL/Translator/Parser/DDL/YAML.pm @@ -30,12 +30,14 @@ role SQL::Translator::Parser::DDL::YAML { keys %{ $data->{'tables'} }; for my $tdata ( @tables ) { - my $table = Table->new({ map { $tdata->{$_} ? ($_ => $tdata->{$_}) : () } qw/name extra options/ }); + my $table = Table->new({ name => $tdata->{name}, schema => $schema }); + $table->extra($tdata->{extra}) if $tdata->{extra}; + $table->options($tdata->{options}) if $tdata->{options}; $schema->add_table($table); - + my @fields = map { $tdata->{'fields'}{ $_->[1] } } - map { [ $tdata->{'fields'}{ $_ }{'order'}, $_ ] } + map { [ $tdata->{'fields'}{ $_ }{'order'} || 0, $_ ] } keys %{ $tdata->{'fields'} }; for my $fdata ( @fields ) { @@ -44,18 +46,24 @@ role SQL::Translator::Parser::DDL::YAML { my $column = Column->new($fdata); $table->add_column($column); - $table->primary_key($column->name) if $fdata->{is_primary_key}; + $column->is_primary_key(1) if $fdata->{is_primary_key}; } - for my $idata ( @{ $tdata->{'indices'} || [] } ) { + for my $idata ( @{ $tdata->{'indices'} || [] } ) { $idata->{table} = $table; + my $columns = delete $idata->{fields}; + my $index = Index->new($idata); + $index->add_column($table->get_column($_)) for @$columns; $table->add_index($index); } for my $cdata ( @{ $tdata->{'constraints'} || [] } ) { $cdata->{table} = $table; + $cdata->{reference_columns} = delete $cdata->{reference_fields}; + my $columns = delete $cdata->{fields} || []; my $constraint = Constraint->new($cdata); + $constraint->add_column($table->get_column($_)) for @$columns; $table->add_constraint($constraint); } } @@ -82,9 +90,9 @@ role SQL::Translator::Parser::DDL::YAML { keys %{ $data->{'triggers'} }; for my $tdata ( @triggers ) { - my @columns = delete $tdata->{fields} || (); + my $columns = delete $tdata->{fields} || (); my $trigger = Trigger->new($tdata); - $trigger->add_column($schema->get_table($tdata->{on_table})->get_column($_)) for @columns; + $trigger->add_column($schema->get_table($tdata->{on_table})->get_column($_)) for @$columns; $schema->add_trigger($trigger); } @@ -113,6 +121,6 @@ role SQL::Translator::Parser::DDL::YAML { $translator->trace( $tr_data->{'trace'} ); } - return $schema; + return 1; } }