primary key fix for YAML
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Parser / DDL / YAML.pm
index 7a39fc0..74b28cc 100644 (file)
@@ -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;
     }
 }