X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser%2FDBIx%2FClass.pm;h=b638fd01fb911c77865ee9f07c9444e225f58e77;hb=6861d1969cec6b1b143126c16987c8059beb306a;hp=6225724440a721a61cfff1e35822d64f11144633;hpb=0009fa4905ab7f4585c4b470bfe049666bce8e17;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/SQL/Translator/Parser/DBIx/Class.pm b/lib/SQL/Translator/Parser/DBIx/Class.pm index 6225724..b638fd0 100644 --- a/lib/SQL/Translator/Parser/DBIx/Class.pm +++ b/lib/SQL/Translator/Parser/DBIx/Class.pm @@ -1,4 +1,5 @@ -package SQL::Translator::Parser::DBIx::Class; +package # hide from PAUSE + SQL::Translator::Parser::DBIx::Class; # AUTHOR: Jess Robinson @@ -21,13 +22,14 @@ use base qw(Exporter); # ------------------------------------------------------------------- # parse($tr, $data) # -# Note that $data, in the case of this parser, is unuseful. +# Note that $data, in the case of this parser, is not useful. # We're working with DBIx::Class Schemas, not data streams. # ------------------------------------------------------------------- sub parse { my ($tr, $data) = @_; my $args = $tr->parser_args; my $dbixschema = $args->{'DBIx::Schema'} || $data; + $dbixschema ||= $args->{'package'}; die 'No DBIx::Schema' unless ($dbixschema); if (!ref $dbixschema) { @@ -71,16 +73,14 @@ sub parse { } $table->primary_key($source->primary_columns); - my @rels = $source->relationships(); foreach my $rel (@rels) { my $rel_info = $source->relationship_info($rel); - print "Accessor: $rel_info->{attrs}{accessor}\n"; next if(!exists $rel_info->{attrs}{accessor} || $rel_info->{attrs}{accessor} eq 'multi'); # Going by the accessor type isn't such a good idea (yes, I know - # I suggested it). I think the best way to tell if something's a + # I suggested it). I think the best way to tell if something is a # foreign key constraint is to assume if it doesn't include our # primaries then it is (dumb but it'll do). Ignore any rel cond # that isn't a straight hash, but get both sets of keys in full @@ -89,22 +89,23 @@ sub parse { # for testing is # $schema->storage->dbh->do($_) for split(";\n", $sql); # -- mst (03:42 local time, please excuse any mistakes) - my $rel_table = $rel_info->{class}->table(); + my $rel_table = $source->related_source($rel)->name; my $cond = (keys (%{$rel_info->{cond}}))[0]; my ($refkey) = $cond =~ /^\w+\.(\w+)$/; + my ($key) = $rel_info->{cond}->{$cond} =~ /^\w+\.(\w+)$/; if($rel_table && $refkey) - { + { $table->add_constraint( - type => 'foreign_key', - name => "fk_${rel}_id", - fields => $rel, + type => 'foreign_key', + name => "fk_${key}", + fields => $key, reference_fields => $refkey, reference_table => $rel_table, - ); + ); } } } -} +} 1;