X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSetColumn.pm;h=5b510de45685b3ae52492cad78562f37ec1675ad;hb=6c5aa1fbffdc9e5679d2f68780b11a9569ec1993;hp=1e2a0ebab79e47344c67f5945d56c315f867ff62;hpb=722274d02c729c50a01db38b0d62042fbc48b5e7;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSetColumn.pm b/lib/DBIx/Class/ResultSetColumn.pm index 1e2a0eb..5b510de 100644 --- a/lib/DBIx/Class/ResultSetColumn.pm +++ b/lib/DBIx/Class/ResultSetColumn.pm @@ -5,12 +5,9 @@ use warnings; use base 'DBIx::Class'; use DBIx::Class::Carp; -use DBIx::Class::_Util 'fail_on_internal_wantarray'; +use DBIx::Class::_Util qw( fail_on_internal_wantarray fail_on_internal_call ); use namespace::clean; -# not importing first() as it will clash with our own method -use List::Util (); - =head1 NAME DBIx::Class::ResultSetColumn - helpful methods for messing @@ -56,7 +53,7 @@ sub new { # (to create a new column definition on-the-fly). my $as_list = $orig_attrs->{as} || []; my $select_list = $orig_attrs->{select} || []; - my $as_index = List::Util::first { ($as_list->[$_] || "") eq $column } 0..$#$as_list; + my ($as_index) = grep { ($as_list->[$_] || "") eq $column } 0..$#$as_list; my $select = defined $as_index ? $select_list->[$as_index] : $column; my $colmap; @@ -257,7 +254,7 @@ sub single { my $self = shift; my $attrs = $self->_resultset->_resolved_attrs; - my ($row) = $self->_resultset->result_source->storage->select_single( + my ($row) = $self->_resultset->result_source->schema->storage->select_single( $attrs->{from}, $attrs->{select}, $attrs->{where}, $attrs ); @@ -281,8 +278,9 @@ resultset (or C if there are none). =cut -sub min { - return shift->func('MIN'); +sub min :DBIC_method_is_indirect_sugar { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + $_[0]->func('MIN'); } =head2 min_rs @@ -301,7 +299,10 @@ Wrapper for ->func_rs for function MIN(). =cut -sub min_rs { return shift->func_rs('MIN') } +sub min_rs :DBIC_method_is_indirect_sugar { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + $_[0]->func_rs('MIN') +} =head2 max @@ -320,8 +321,9 @@ resultset (or C if there are none). =cut -sub max { - return shift->func('MAX'); +sub max :DBIC_method_is_indirect_sugar { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + $_[0]->func('MAX'); } =head2 max_rs @@ -340,7 +342,10 @@ Wrapper for ->func_rs for function MAX(). =cut -sub max_rs { return shift->func_rs('MAX') } +sub max_rs :DBIC_method_is_indirect_sugar { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + $_[0]->func_rs('MAX') +} =head2 sum @@ -359,8 +364,9 @@ the resultset. Use on varchar-like columns at your own risk. =cut -sub sum { - return shift->func('SUM'); +sub sum :DBIC_method_is_indirect_sugar { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + $_[0]->func('SUM'); } =head2 sum_rs @@ -379,7 +385,10 @@ Wrapper for ->func_rs for function SUM(). =cut -sub sum_rs { return shift->func_rs('SUM') } +sub sum_rs :DBIC_method_is_indirect_sugar { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + $_[0]->func_rs('SUM') +} =head2 func @@ -406,7 +415,7 @@ sub func { my $cursor = $self->func_rs($function)->cursor; if( wantarray ) { - DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_WANTARRAY and my $sog = fail_on_internal_wantarray($self); + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_WANTARRAY and my $sog = fail_on_internal_wantarray; return map { $_->[ 0 ] } $cursor->all; } @@ -439,7 +448,21 @@ sub func_rs { $rs = $rs->as_subselect_rs; } - $rs->search( undef, { + # FIXME - remove at some point in the future (2018-ish) + wantarray + and + carp_unique( + 'Starting with DBIC@0.082900 func_rs() always returns a ResultSet ' + . 'instance regardless of calling context. Please force scalar() context to ' + . 'silence this warning' + ) + and + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_WANTARRAY + and + my $sog = fail_on_internal_wantarray + ; + + $rs->search_rs( undef, { columns => { $self->{_as} => { $function => $select } } } ); } @@ -487,14 +510,14 @@ sub _resultset { unless( $cols{$select} ) { carp_unique( 'Use of distinct => 1 while selecting anything other than a column ' - . 'declared on the primary ResultSource is deprecated - please supply ' - . 'an explicit group_by instead' + . 'declared on the primary ResultSource is deprecated (you selected ' + . "'$self->{_as}') - please supply an explicit group_by instead" ); # collapse the selector to a literal so that it survives the distinct parse # if it turns out to be an aggregate - at least the user will get a proper exception # instead of silent drop of the group_by altogether - $select = \ $rsrc->storage->sql_maker->_recurse_fields($select); + $select = \[ $rsrc->schema->storage->sql_maker->_recurse_fields($select) ]; } } @@ -504,14 +527,18 @@ sub _resultset { }; } -1; +=head1 FURTHER QUESTIONS? -=head1 AUTHOR AND CONTRIBUTORS +Check the list of L. -See L and L in DBIx::Class +=head1 COPYRIGHT AND LICENSE -=head1 LICENSE - -You may distribute this code under the same terms as Perl itself. +This module is free software L +by the L. You can +redistribute it and/or modify it under the same terms as the +L. =cut + +1; +