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;
}