register_resultset, Cursor fixes
Matt S Trout [Fri, 20 Jan 2006 03:41:15 +0000 (03:41 +0000)]
lib/DBIx/Class/Relationship/Accessor.pm
lib/DBIx/Class/Relationship/Base.pm
lib/DBIx/Class/Relationship/CascadeActions.pm
lib/DBIx/Class/Relationship/ProxyMethods.pm
lib/DBIx/Class/ResultSourceInstance.pm
lib/DBIx/Class/Row.pm
lib/DBIx/Class/Storage/DBI/Cursor.pm

index ca902b3..5c2c38d 100644 (file)
@@ -3,14 +3,12 @@ package DBIx::Class::Relationship::Accessor;
 use strict;
 use warnings;
 
-sub add_relationship {
-  my ($class, $rel, @rest) = @_;
-  my $ret = $class->next::method($rel => @rest);
-  my $rel_obj = $class->relationship_info($rel);
-  if (my $acc_type = $rel_obj->{attrs}{accessor}) {
+sub register_relationship {
+  my ($class, $rel, $info) = @_;
+  if (my $acc_type = $info->{attrs}{accessor}) {
     $class->add_relationship_accessor($rel => $acc_type);
   }
-  return $ret;
+  $class->next::method($rel => $info);
 }
 
 sub add_relationship_accessor {
index b662a23..c97635e 100644 (file)
@@ -69,8 +69,14 @@ created, which calls C<create_related> for the relationship.
 
 =back
 
+=head2 register_relationship($relname, $rel_info)
+
+Registers a relationship on the class
+
 =cut
 
+sub register_relationship { }
+
 =head2 search_related
 
   My::Table->search_related('relname', $cond, $attrs);
index e1d1341..71a28c0 100644 (file)
@@ -9,7 +9,8 @@ sub delete {
 
   my $ret = $self->next::method(@rest);
 
-  my %rels = map { $_ => $self->relationship_info($_) } $self->relationships;
+  my $source = $self->result_source;
+  my %rels = map { $_ => $source->relationship_info($_) } $source->relationships;
   my @cascade = grep { $rels{$_}{attrs}{cascade_delete} } keys %rels;
   foreach my $rel (@cascade) {
     $self->search_related($rel)->delete;
@@ -24,7 +25,8 @@ sub update {
 
   my $ret = $self->next::method(@rest);
 
-  my %rels = map { $_ => $self->relationship_info($_) } $self->relationships;
+  my $source = $self->result_source;
+  my %rels = map { $_ => $source->relationship_info($_) } $source->relationships;
   my @cascade = grep { $rels{$_}{attrs}{cascade_update} } keys %rels;
   foreach my $rel (@cascade) {
     $_->update for $self->$rel;
index 7ac439b..03f32c4 100644 (file)
@@ -5,14 +5,13 @@ use warnings;
 
 use base qw/DBIx::Class/;
 
-sub add_relationship {
-  my ($class, $rel, @rest) = @_;
-  my $ret = $class->next::method($rel => @rest);
-  if (my $proxy_list = $class->relationship_info($rel)->{attrs}{proxy}) {
+sub register_relationship {
+  my ($class, $rel, $info) = @_;
+  if (my $proxy_list = $info->{attrs}{proxy}) {
     $class->proxy_to_related($rel,
               (ref $proxy_list ? @$proxy_list : $proxy_list));
   }
-  return $ret;
+  $class->next::method($rel, $info);
 }
 
 sub proxy_to_related {
index 3b1a92e..e9fd560 100644 (file)
@@ -40,7 +40,10 @@ sub set_primary_key { shift->result_source_instance->set_primary_key(@_); }
 sub primary_columns { shift->result_source_instance->primary_columns(@_); }
 
 sub add_relationship {
-  shift->result_source_instance->add_relationship(@_);
+  my ($class, $rel, @rest) = @_;
+  my $source = $class->result_source_instance;
+  $source->add_relationship($rel => @rest);
+  $class->register_relationship($rel => $source->relationship_info($rel));
 }
 
 sub relationships {
index 21003db..a03a3d7 100644 (file)
@@ -320,7 +320,7 @@ sub is_changed {
 
   Accessor to the ResultSource this object was created from
 
-=head2 register_column
+=head2 register_column($column, $column_info)
 
   Registers a column on the class and creates an accessor for it
 
index 41b3da5..361b129 100644 (file)
@@ -20,6 +20,7 @@ sub new {
 sub next {
   my ($self) = @_;
   if ($self->{attrs}{rows} && $self->{pos} >= $self->{attrs}{rows}) {
+    $self->{sth}->finish if $self->{sth}->{Active};
     delete $self->{sth};
     $self->{done} = 1;
   }