apparently working additional parent support
Matt S Trout [Tue, 18 Aug 2009 04:45:46 +0000 (05:45 +0100)]
lib/DBIx/Class/ResultSource/MultipleTableInheritance.pm
t/01load.t
t/02view_def.t
t/lib/MTITest/Result/Bar.pm
t/lib/MTITest/Result/Foo.pm
t/lib/MTITest/Result/Mixin.pm [new file with mode: 0644]

index 0a45aa8..d385727 100644 (file)
@@ -67,19 +67,27 @@ method add_additional_parent ($source) {
   }
 }
 
+method _source_by_name ($name) {
+  my $schema = $self->schema;
+  my ($source) = 
+    grep { $_->name eq $name }
+      map $schema->source($_), $schema->sources;
+  confess "Couldn't find attached source for parent $name - did you use load_classes? This module is only compatible with load_namespaces"
+    unless $source;
+  return $source;
+}
+
 method schema (@args) {
   my $ret = $self->next::method(@args);
   if (@args) {
     if ($self->parent_source) {
-      my $schema = $self->schema;
       my $parent_name = $self->parent_source->name;
-      my ($parent) = 
-        grep { $_->name eq $parent_name }
-          map $schema->source($_), $schema->sources;
-      confess "Couldn't find attached source for parent $parent_name - did you use load_classes? This module is only compatible with load_namespaces"
-        unless $parent;
-      $self->parent_source($parent); # so our parent is the one in this schema
+      $self->parent_source($self->_source_by_name($parent_name));
     }
+    $self->additional_parents([
+      map { $self->_source_by_name($_->name) }
+      @{$self->additional_parents||[]}
+    ]);
   }
   return $ret;
 }
index e5bebd3..dd10a1b 100644 (file)
@@ -6,8 +6,6 @@ use Data::Dumper; $Data::Dumper::Indent = 1;
 
 BEGIN { use_ok 'MTITest'; }
 
-warn MTITest->sources;
-
 my $raw_foo = MTITest->source('Raw::Foo');
 
 is_deeply(
index 1d82d4e..e4f888f 100644 (file)
@@ -1,6 +1,7 @@
 use strict;
 use warnings;
 use lib 't/lib';
+use File::Temp;
 use Test::More qw(no_plan);
 use Test::Exception;
 use Data::Dumper; $Data::Dumper::Indent = 1;
@@ -12,4 +13,10 @@ dies_ok { MTITest->source('Foo')->view_definition }
 
 my $schema = MTITest->connect('dbi:SQLite::memory:');
 
-warn $schema->source($_)->view_definition for qw(Foo Bar);
+my $dir = "t/sql"; # tempdir(CLEANUP => 0);
+
+$schema->create_ddl_dir([ 'PostgreSQL' ], 0.1, $dir);
+
+#warn $schema->source($_)->view_definition for qw(Foo Bar);
+#use Data::Dumper; $Data::Dumper::Indent = 1;
+#warn Dumper($schema->source($_)) for qw(Foo Bar);
index c47448f..b02325c 100644 (file)
@@ -4,8 +4,14 @@ use strict;
 use warnings;
 use parent qw(MTITest::Result::Foo);
 
+require MTITest::Result::Mixin;
+
 __PACKAGE__->table('bar');
 
+__PACKAGE__->result_source_instance->add_additional_parent(
+  MTITest::Result::Mixin->result_source_instance
+);
+
 __PACKAGE__->add_columns(
   b => { data_type => 'integer' }
 );
index 450271d..d8b8e1b 100644 (file)
@@ -11,7 +11,7 @@ __PACKAGE__->table('foo');
 
 __PACKAGE__->add_columns(
   id => { data_type => 'integer', is_auto_increment => 1 },
-  a => { data_type => 'integer' }
+  a => { data_type => 'integer', is_nullable => 1 }
 );
 
 __PACKAGE__->set_primary_key('id');
diff --git a/t/lib/MTITest/Result/Mixin.pm b/t/lib/MTITest/Result/Mixin.pm
new file mode 100644 (file)
index 0000000..e6c1124
--- /dev/null
@@ -0,0 +1,18 @@
+package MTITest::Result::Mixin;
+
+use strict;
+use warnings;
+use parent qw(DBIx::Class::Core);
+
+__PACKAGE__->table('mixin');
+
+__PACKAGE__->add_columns(
+  id => {
+    data_type => 'integer', is_auto_increment => 1, sequence => 'foo_id_seq'
+  },
+  words => { data_type => 'text' }
+);
+
+__PACKAGE__->set_primary_key('id');
+
+1;