X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FObject%2FTable.pm;h=3ba3d6092f86466cfcab196921f0138da1f4b829;hb=a4eab010d6aac93bec5e46c102c293dff4123b3e;hp=35f9d9ee4df5e43e78bf9c39a35f343e9ba5ccda;hpb=5e41f308804fa7a79f4dd69cf4f42c5ceeabfc4d;p=dbsrgits%2FSQL-Translator-2.0-ish.git diff --git a/lib/SQL/Translator/Object/Table.pm b/lib/SQL/Translator/Object/Table.pm index 35f9d9e..3ba3d60 100644 --- a/lib/SQL/Translator/Object/Table.pm +++ b/lib/SQL/Translator/Object/Table.pm @@ -99,6 +99,10 @@ class SQL::Translator::Object::Table extends SQL::Translator::Object is dirty { isa => Int, ); + around get_column(Column $column does coerce) { + $self->$orig($column->name); + } + around add_column(Column $column does coerce) { die "Can't use column name " . $column->name if $self->exists_column($column->name) || $column->name eq ''; $column->table($self); @@ -107,6 +111,14 @@ class SQL::Translator::Object::Table extends SQL::Translator::Object is dirty { } around add_constraint(Constraint $constraint does coerce) { + if ($constraint->type eq 'FOREIGN KEY') { + my @columns = $constraint->get_columns; + die "There are no columns associated with this foreign key constraint." unless scalar @columns; + for my $column (@columns) { + die "Can't use column " . $column->name . ". It doesn't exist!" unless $self->exists_column($column); + } + die "Reference table " . $constraint->reference_table . " does not exist!" unless $self->schema->exists_table($constraint->reference_table); + } my $name = $constraint->name; if ($name eq '') { my $idx = 0; @@ -140,10 +152,11 @@ class SQL::Translator::Object::Table extends SQL::Translator::Object is dirty { multi method primary_key { my $constraints = $self->constraints; - for my $key (keys %$constraints) { - return $constraints->{$key} if $constraints->{$key}{type} eq 'PRIMARY KEY'; + for my $key ($constraints->Keys) { + my $val = $constraints->FETCH($key); + return $val if $val->type eq 'PRIMARY KEY'; } - return undef; + return; } multi method primary_key(Str $column) { @@ -152,10 +165,10 @@ class SQL::Translator::Object::Table extends SQL::Translator::Object is dirty { my $primary_key = $self->primary_key; unless (defined $primary_key) { - $primary_key = SQL::Translator::Object::Constraint->new({ type => 'PRIMARY KEY' }); + $primary_key = SQL::Translator::Object::Constraint->new( type => 'PRIMARY KEY' ); $self->add_constraint($primary_key); } - $primary_key->add_field({ name => $column }) unless $primary_key->exists_column($column); ## FIX ME, change back to add_column once around add_column(coerce .. ) works + $primary_key->add_column( name => $column ) unless $primary_key->exists_column($column); return $primary_key; } @@ -195,9 +208,11 @@ class SQL::Translator::Object::Table extends SQL::Translator::Object is dirty { around BUILDARGS(ClassName $self: @args) { my $args = $self->$orig(@args); - my $fields = delete $args->{fields}; - - $args->{columns}{$_} = SQL::Translator::Object::Column->new( name => $_ ) for @$fields; + my $fields = delete $args->{fields} || []; + $fields = ref($fields) eq 'ARRAY' ? $fields : [ $fields ]; + my $ix_hash = Tie::IxHash->new(); + $ix_hash->STORE($_, SQL::Translator::Object::Column->new( name => $_ )) for @$fields; + $args->{columns} = $ix_hash; return $args; }