X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSetColumn.pm;h=3ed93426237ab04cbb26ca36c97c447f550575de;hb=7ae9706c9d89bf85830a5598f30d48b8fb2a3199;hp=2679803e6124a412049434833e97ef42797860b7;hpb=00f574412a72ccd315cba27036b6e9b664e96a2b;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSetColumn.pm b/lib/DBIx/Class/ResultSetColumn.pm index 2679803..3ed9342 100644 --- a/lib/DBIx/Class/ResultSetColumn.pm +++ b/lib/DBIx/Class/ResultSetColumn.pm @@ -36,21 +36,32 @@ passed as params. Used internally by L. sub new { my ($class, $rs, $column) = @_; $class = ref $class if ref $class; + + $rs->throw_exception("column must be supplied") unless $column; + my $new_parent_rs = $rs->search_rs; # we don't want to mess up the original, so clone it - my $attrs = $new_parent_rs->_resolved_attrs; - $new_parent_rs->{attrs}->{prefetch} = undef; # prefetch cause additional columns to be fetched + + # prefetch causes additional columns to be fetched, but we can not just make a new + # rs via the _resolved_attrs trick - we need to retain the separation between + # +select/+as and select/as + for my $attr (qw/prefetch collapse/) { + for (qw/attrs _attrs/) { + delete $new_parent_rs->{$_}{$attr} if ref $new_parent_rs->{$_}; + } + } # If $column can be found in the 'as' list of the parent resultset, use the # corresponding element of its 'select' list (to keep any custom column # definition set up with 'select' or '+select' attrs), otherwise use $column # (to create a new column definition on-the-fly). + my $attrs = $new_parent_rs->_resolved_attrs; + my $as_list = $attrs->{as} || []; my $select_list = $attrs->{select} || []; my $as_index = List::Util::first { ($as_list->[$_] || "") eq $column } 0..$#$as_list; my $select = defined $as_index ? $select_list->[$as_index] : $column; my $new = bless { _select => $select, _as => $column, _parent_resultset => $new_parent_rs }, $class; - $new->throw_exception("column must be supplied") unless $column; return $new; }