Start of TableInstance code. CDBICompat currently b0rken
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / ResultSet.pm
index 8b8da5f..ce038db 100644 (file)
@@ -33,13 +33,13 @@ any queries -- these are executed as needed by the other methods.
 =cut
 
 sub new {
-  my ($class, $db_class, $attrs) = @_;
+  my ($class, $source, $attrs) = @_;
   #use Data::Dumper; warn Dumper(@_);
   $class = ref $class if ref $class;
   $attrs = { %{ $attrs || {} } };
   my %seen;
-  $attrs->{cols} ||= [ map { "me.$_" } $db_class->_select_columns ];
-  $attrs->{from} ||= [ { 'me' => $db_class->_table_name } ];
+  $attrs->{cols} ||= [ map { "me.$_" } $source->columns ];
+  $attrs->{from} ||= [ { 'me' => $source->name } ];
   if ($attrs->{join}) {
     foreach my $j (ref $attrs->{join} eq 'ARRAY'
               ? (@{$attrs->{join}}) : ($attrs->{join})) {
@@ -49,17 +49,18 @@ sub new {
         $seen{$j} = 1;
       }
     }
-    push(@{$attrs->{from}}, $db_class->_resolve_join($attrs->{join}, 'me'));
+    push(@{$attrs->{from}}, $source->result_class->_resolve_join($attrs->{join}, 'me'));
   }
   foreach my $pre (@{$attrs->{prefetch} || []}) {
-    push(@{$attrs->{from}}, $db_class->_resolve_join($pre, 'me'))
+    push(@{$attrs->{from}}, $source->result_class->_resolve_join($pre, 'me'))
       unless $seen{$pre};
     push(@{$attrs->{cols}},
       map { "$pre.$_" }
-      $db_class->_relationships->{$pre}->{class}->_select_columns);
+      $source->result_class->_relationships->{$pre}->{class}->table->columns);
   }
   my $new = {
-    source => $db_class,
+    source => $source,
+    result_class => $source->result_class,
     cols => $attrs->{cols},
     cond => $attrs->{where},
     from => $attrs->{from},
@@ -166,7 +167,7 @@ Returns a subset of elements from the resultset.
 sub slice {
   my ($self, $min, $max) = @_;
   my $attrs = { %{ $self->{attrs} || {} } };
-  $self->{source}->throw("Can't slice without where") unless $attrs->{where};
+  $self->{source}->result_class->throw("Can't slice without where") unless $attrs->{where};
   $attrs->{offset} = $min;
   $attrs->{rows} = ($max ? ($max - $min + 1) : 1);
   my $slice = $self->new($self->{source}, $attrs);
@@ -193,17 +194,17 @@ sub _construct_object {
   @cols = grep { /\(/ or ! /\./ } @cols;
   my $new;
   unless ($self->{attrs}{prefetch}) {
-    $new = $self->{source}->_row_to_object(\@cols, \@row);
+    $new = $self->{source}->result_class->_row_to_object(\@cols, \@row);
   } else {
     my @main = splice(@row, 0, scalar @cols);
-    $new = $self->{source}->_row_to_object(\@cols, \@main);
+    $new = $self->{source}->result_class->_row_to_object(\@cols, \@main);
     PRE: foreach my $pre (@{$self->{attrs}{prefetch}}) {
-      my $rel_obj = $self->{source}->_relationships->{$pre};
-      my $pre_class = $self->{source}->resolve_class($rel_obj->{class});
+      my $rel_obj = $self->{source}->result_class->_relationships->{$pre};
+      my $pre_class = $self->{source}->result_class->resolve_class($rel_obj->{class});
       my @pre_cols = $pre_class->_select_columns;
       my @vals = splice(@row, 0, scalar @pre_cols);
       my $fetched = $pre_class->_row_to_object(\@pre_cols, \@vals);
-      $self->{source}->throw("No accessor for prefetched $pre")
+      $self->{source}->result_class->throw("No accessor for prefetched $pre")
         unless defined $rel_obj->{attrs}{accessor};
       if ($rel_obj->{attrs}{accessor} eq 'single') {
         foreach my $pri ($rel_obj->{class}->primary_columns) {
@@ -216,7 +217,7 @@ sub _construct_object {
       } elsif ($rel_obj->{attrs}{accessor} eq 'filter') {
         $new->{_inflated_column}{$pre} = $fetched;
       } else {
-        $self->{source}->throw("Don't know how to store prefetched $pre");
+        $self->{source}->result_class->throw("Don't know how to store prefetched $pre");
       }
     }
   }