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);
}
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;
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) {
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;
}
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;
}