X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSourceProxy.pm;h=cfd37cab8598b53e7c5f33d9089ed1639b75581c;hb=e570488ade8f327f47dd3318db3443a348d561d6;hp=dcbc2761570e8bc30eeab245f046d0b28bb6ea40;hpb=89170201e8ff8c60fab401b4b2e60f0fa13a3c47;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/ResultSourceProxy.pm b/lib/DBIx/Class/ResultSourceProxy.pm index dcbc276..cfd37ca 100644 --- a/lib/DBIx/Class/ResultSourceProxy.pm +++ b/lib/DBIx/Class/ResultSourceProxy.pm @@ -4,50 +4,59 @@ package # hide from PAUSE use strict; use warnings; -use base qw/DBIx::Class/; -use Scalar::Util qw/blessed/; -use Sub::Name qw/subname/; +use base 'DBIx::Class'; + +use DBIx::Class::_Util qw( quote_sub fail_on_internal_call ); use namespace::clean; __PACKAGE__->mk_group_accessors('inherited_ro_instance' => 'source_name'); -sub get_inherited_ro_instance { shift->get_inherited(@_) } +sub get_inherited_ro_instance { $_[0]->get_inherited($_[1]) } sub set_inherited_ro_instance { - my $self = shift; - - $self->throw_exception ("Cannot set @{[shift]} on an instance") - if blessed $self; + $_[0]->throw_exception ("Cannot set '$_[1]' on an instance") + if length ref $_[0]; - $self->set_inherited(@_); + $_[0]->set_inherited( $_[1], $_[2] ); } sub add_columns { my ($class, @cols) = @_; - my $source = $class->result_source_instance; + my $source = $class->result_source; $source->add_columns(@cols); + + my $colinfos; foreach my $c (grep { !ref } @cols) { # If this is an augment definition get the real colname. $c =~ s/^\+//; - $class->register_column($c => $source->column_info($c)); + $class->register_column( + $c, + ( $colinfos ||= $source->columns_info )->{$c} + ); } } -sub add_column { shift->add_columns(@_) } +sub add_column { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + shift->add_columns(@_) +} sub add_relationship { my ($class, $rel, @rest) = @_; - my $source = $class->result_source_instance; + my $source = $class->result_source; $source->add_relationship($rel => @rest); $class->register_relationship($rel => $source->relationship_info($rel)); } # legacy resultset_class accessor, seems to be used by cdbi only -sub iterator_class { shift->result_source_instance->resultset_class(@_) } +sub iterator_class { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + shift->result_source->resultset_class(@_) +} for my $method_to_proxy (qw/ source_info @@ -62,11 +71,11 @@ for my $method_to_proxy (qw/ remove_columns column_info + columns_info column_info_from_storage set_primary_key primary_columns - _pri_cols sequence add_unique_constraint @@ -80,10 +89,12 @@ for my $method_to_proxy (qw/ relationship_info has_relationship /) { - no strict qw/refs/; - *{__PACKAGE__."::$method_to_proxy"} = subname $method_to_proxy => sub { - shift->result_source_instance->$method_to_proxy (@_); - }; + quote_sub __PACKAGE__."::$method_to_proxy", sprintf( <<'EOC', $method_to_proxy ); + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and DBIx::Class::_Util::fail_on_internal_call; + + shift->result_source->%s (@_); +EOC + } 1;