X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema.pm;h=2f85adbaf9f03a0c4b74de0574bcf7dbdead56d6;hb=f18d2d041d8a6c36a1d87a75f8531ee2f59940b5;hp=cf7267dbc1b9cbb73f2baee5dd6282b291fa4eed;hpb=4c7d99ca4a9aad86839d47ed90e72c227c43feea;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Schema.pm b/lib/DBIx/Class/Schema.pm index cf7267d..2f85adb 100644 --- a/lib/DBIx/Class/Schema.pm +++ b/lib/DBIx/Class/Schema.pm @@ -617,7 +617,7 @@ sub txn_do { $self->storage->txn_do(@_); } -=head2 txn_scope_guard (EXPERIMENTAL) +=head2 txn_scope_guard Runs C on the schema's storage. See L. @@ -1267,24 +1267,33 @@ sub register_extra_source { sub _register_source { my ($self, $moniker, $source, $params) = @_; + my $orig_source = $source; + $source = $source->new({ %$source, source_name => $moniker }); + $source->schema($self); + weaken($source->{schema}) if ref($self); + + my $rs_class = $source->result_class; + my %reg = %{$self->source_registrations}; $reg{$moniker} = $source; $self->source_registrations(\%reg); - $source->schema($self); - weaken($source->{schema}) if ref($self); return if ($params->{extra}); - if ($source->result_class) { - my %map = %{$self->class_mappings}; - if (exists $map{$source->result_class}) { - warn $source->result_class . ' already has a source, use register_extra_source for additional sources'; - } - $map{$source->result_class} = $moniker; - $self->class_mappings(\%map); + my %map = %{$self->class_mappings}; + if ( + exists $map{$rs_class} + and + $map{$rs_class} ne $moniker + and + $rs_class->result_source_instance ne $orig_source + ) { + carp "$rs_class already has a source, use register_extra_source for additional sources"; } + $map{$rs_class} = $moniker; + $self->class_mappings(\%map); } sub _unregister_source {