X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSourceProxy.pm;h=70de112c87e1e3f563ff9b633baceaeebc24b8eb;hb=b83736a7d3235d2f50fe5695550eb3637432d960;hp=16029b988d296d8a2330eb1d16bbcfa5b404708c;hpb=c0e7b4e55952cd193b6f1866d0c27ece182397eb;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSourceProxy.pm b/lib/DBIx/Class/ResultSourceProxy.pm index 16029b9..70de112 100644 --- a/lib/DBIx/Class/ResultSourceProxy.pm +++ b/lib/DBIx/Class/ResultSourceProxy.pm @@ -1,47 +1,48 @@ -package # hide from PAUSE +package # hide from PAUSE DBIx::Class::ResultSourceProxy; use strict; use warnings; -use base qw/DBIx::Class/; +use base 'DBIx::Class'; -sub iterator_class { shift->result_source_instance->resultset_class(@_) } -sub resultset_class { shift->result_source_instance->resultset_class(@_) } +use DBIx::Class::_Util qw( quote_sub fail_on_internal_call ); +use namespace::clean; -sub resultset_attributes { - shift->result_source_instance->resultset_attributes(@_); +__PACKAGE__->mk_group_accessors('inherited_ro_instance' => 'source_name'); + +sub get_inherited_ro_instance { $_[0]->get_inherited($_[1]) } + +sub set_inherited_ro_instance { + $_[0]->throw_exception ("Cannot set '$_[1]' on an instance") + if length ref $_[0]; + + $_[0]->set_inherited( $_[1], $_[2] ); } + sub add_columns { my ($class, @cols) = @_; my $source = $class->result_source_instance; $source->add_columns(@cols); + + my $colinfos; foreach my $c (grep { !ref } @cols) { - $class->register_column($c => $source->column_info($c)); - } -} + # If this is an augment definition get the real colname. + $c =~ s/^\+//; -sub has_column { - my ($self, $column) = @_; - return $self->result_source_instance->has_column($column); + $class->register_column( + $c, + ( $colinfos ||= $source->columns_info )->{$c} + ); + } } -sub column_info { - my ($self, $column) = @_; - return $self->result_source_instance->column_info($column); +sub add_column { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + shift->add_columns(@_) } - -sub columns { - return shift->result_source_instance->columns(@_); -} - -sub set_primary_key { shift->result_source_instance->set_primary_key(@_); } -sub primary_columns { shift->result_source_instance->primary_columns(@_); } - -sub add_unique_constraint { shift->result_source_instance->add_unique_constraint(@_); } -sub unique_constraints { shift->result_source_instance->unique_constraints(@_); } sub add_relationship { my ($class, $rel, @rest) = @_; @@ -50,12 +51,49 @@ sub add_relationship { $class->register_relationship($rel => $source->relationship_info($rel)); } -sub relationships { - shift->result_source_instance->relationships(@_); + +# legacy resultset_class accessor, seems to be used by cdbi only +sub iterator_class { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + shift->result_source_instance->resultset_class(@_) } -sub relationship_info { - shift->result_source_instance->relationship_info(@_); +for my $method_to_proxy (qw/ + source_info + result_class + resultset_class + resultset_attributes + + columns + has_column + + remove_column + remove_columns + + column_info + columns_info + column_info_from_storage + + set_primary_key + primary_columns + sequence + + add_unique_constraint + add_unique_constraints + + unique_constraints + unique_constraint_names + unique_constraint_columns + + relationships + relationship_info + has_relationship +/) { + 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_instance->%s (@_); +EOC + } 1;