Add flag for correctly introspecting fk rels
Arthur Axel 'fREW' Schmidt [Tue, 15 May 2012 13:54:24 +0000 (08:54 -0500)]
Changes
lib/DBIx/Class/Relationship/Base.pm
lib/DBIx/Class/Relationship/BelongsTo.pm
lib/DBIx/Class/Relationship/HasMany.pm
lib/DBIx/Class/Relationship/HasOne.pm

diff --git a/Changes b/Changes
index 2fef676..2c5465a 100644 (file)
--- a/Changes
+++ b/Changes
@@ -34,6 +34,7 @@ Revision history for DBIx::Class
           - Transaction support
           - Support for VARCHAR(MAX)/VARBINARY(MAX)/NVARCHAR(MAX) datatypes
           - Nomalization of retrieved GUID values
+        - Added flag for correctly introspecting foreign key relationships
 
     * Fixes
         - Fix complex has_many prefetch with resultsets not selecting identity
index 6cfe28c..693ebae 100644 (file)
@@ -309,6 +309,15 @@ related object, but you also want the relationship accessor to double as
 a column accessor). For C<multi> accessors, an add_to_* method is also
 created, which calls C<create_related> for the relationship.
 
+=item is_foreign_rel
+
+This is automatically set for all of the relationship helper methods.  This is
+basically a flag that allows us to correctly introspect true foreign keys;
+or to be clear, this flag says "this relationship includes columns that point
+to another table."
+Do not confuse this with L</is_foreign_key_constraint> which serves a different
+purpose.
+
 =item is_foreign_key_constraint
 
 If you are using L<SQL::Translator> to create SQL for you and you find that it
index 76ffb50..aeb434b 100644 (file)
@@ -20,6 +20,9 @@ sub belongs_to {
   # assume a foreign key contraint unless defined otherwise
   $attrs->{is_foreign_key_constraint} = 1
     if not exists $attrs->{is_foreign_key_constraint};
+
+  $attrs->{is_foreign_rel} = 1
+    if not exists $attrs->{is_foreign_rel};
   $attrs->{undef_on_null_fk} = 1
     if not exists $attrs->{undef_on_null_fk};
 
index b8a9b4c..06a3bc3 100644 (file)
@@ -51,6 +51,9 @@ sub has_many {
 
   my $default_cascade = ref $cond eq 'CODE' ? 0 : 1;
 
+  $attrs->{is_foreign_rel} = 0
+    if not exists $attrs->{is_foreign_rel};
+
   $class->add_relationship($rel, $f_class, $cond, {
     accessor => 'multi',
     join_type => 'LEFT',
index f9046ca..b0d21aa 100644 (file)
@@ -53,6 +53,9 @@ sub _has_one {
 
   my $default_cascade = ref $cond eq 'CODE' ? 0 : 1;
 
+  $attrs->{is_foreign_rel} = 0
+    if not exists $attrs->{is_foreign_rel};
+
   $class->add_relationship($rel, $f_class,
    $cond,
    { accessor => 'single',