X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSourceProxy.pm;h=859b39729d5a18a8a6c53d8c9b09803a529d3dcb;hb=a93c65f29d8a3fc58e0d19fec4195a371c999fea;hp=069a94b70faa9d95b29e2ea83bc94bb84d25c4e9;hpb=bc0c980086ba429cf33b1d471d1035601727231f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSourceProxy.pm b/lib/DBIx/Class/ResultSourceProxy.pm index 069a94b..859b397 100644 --- a/lib/DBIx/Class/ResultSourceProxy.pm +++ b/lib/DBIx/Class/ResultSourceProxy.pm @@ -1,57 +1,42 @@ -package # hide from PAUSE +package # hide from PAUSE DBIx::Class::ResultSourceProxy; use strict; use warnings; use base qw/DBIx::Class/; +use Scalar::Util qw/blessed/; +use Sub::Name qw/subname/; +use namespace::clean; -sub iterator_class { shift->result_source_instance->resultset_class(@_) } -sub resultset_class { shift->result_source_instance->resultset_class(@_) } +__PACKAGE__->mk_group_accessors('inherited_ro_instance' => 'source_name'); -sub resultset_attributes { - shift->result_source_instance->resultset_attributes(@_); +sub get_inherited_ro_instance { shift->get_inherited(@_) } + +sub set_inherited_ro_instance { + my $self = shift; + + $self->throw_exception ("Cannot set @{[shift]} on an instance") + if blessed $self; + + $self->set_inherited(@_); } + sub add_columns { my ($class, @cols) = @_; my $source = $class->result_source_instance; $source->add_columns(@cols); 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)); } } -sub has_column { - my ($self, $column) = @_; - return $self->result_source_instance->has_column($column); -} - -sub column_info { - my ($self, $column) = @_; - return $self->result_source_instance->column_info($column); -} - - -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 add_column { shift->add_columns(@_) } -sub unique_constraints { - shift->result_source_instance->unique_constraints(@_); -} sub add_relationship { my ($class, $rel, @rest) = @_; @@ -60,12 +45,44 @@ sub add_relationship { $class->register_relationship($rel => $source->relationship_info($rel)); } -sub relationships { - shift->result_source_instance->relationships(@_); -} -sub relationship_info { - shift->result_source_instance->relationship_info(@_); +# legacy resultset_class accessor, seems to be used by cdbi only +sub iterator_class { shift->result_source_instance->resultset_class(@_) } + +for my $method_to_proxy (qw/ + source_info + result_class + resultset_class + resultset_attributes + + columns + has_column + + remove_column + remove_columns + + column_info + column_info_from_storage + + set_primary_key + primary_columns + _pri_cols + + add_unique_constraint + add_unique_constraints + + unique_constraints + unique_constraint_names + unique_constraint_columns + + relationships + relationship_info + has_relationship +/) { + no strict qw/refs/; + *{__PACKAGE__."::$method_to_proxy"} = subname $method_to_proxy => sub { + shift->result_source_instance->$method_to_proxy (@_); + }; } 1;