initial tests and some fixups
[dbsrgits/DBIx-Class-ResultSource-MultipleTableInheritance.git] / lib / DBIx / Class / ResultSource / MultipleTableInheritance.pm
index cb9edce..f27eab6 100644 (file)
@@ -6,6 +6,7 @@ use parent qw(DBIx::Class::ResultSource::View);
 use Method::Signatures::Simple;
 use Carp::Clan qw/^DBIx::Class/;
 use aliased 'DBIx::Class::ResultSource::Table';
+use aliased 'DBIx::Class::ResultClass::HashRefInflator';
 use namespace::autoclean;
 
 # how this works:
@@ -29,14 +30,23 @@ method new ($class: @args) {
   my $new = $class->next::method(@args);
   my $rc = $new->result_class;
   if (my $meth = $rc->can('result_source_instance')) {
-    $new->parent_source($rc->$meth);
-  }
-  if ($new->schema) {
-    $new->_attach_additional_sources;
+    my $source = $rc->$meth;
+    if ($source->result_class ne $new->result_class
+        && $new->result_class->isa($source->result_class)) {
+      $new->parent_source($source);
+    }
   }
   return $new;
 }
 
+method schema (@args) {
+  my $ret = $self->next::method(@args);
+  if (@args) {
+    $self->_attach_additional_sources;
+  }
+  return $ret;
+}
+
 method _attach_additional_sources () {
   my $raw_name = $self->_raw_source_name;
   my $schema = $self->schema;
@@ -67,10 +77,10 @@ method _attach_additional_sources () {
     foreach my $pri ($self->primary_columns) {
       my %info = %{$self->column_info($pri)};
       delete @info{qw(is_auto_increment sequence auto_nextval)};
-      $self->add_column($pri => \%info);
+      $table->add_column($pri => \%info);
       $join{"foreign.${pri}"} = "self.${pri}";
     }
-    $self->add_relationship('parent', $parent->source_name, \%join);
+    $table->add_relationship('parent', $parent->source_name, \%join);
   }
   $table->set_primary_key($self->primary_columns);
   $schema->register_source($raw_name => $table);