use Class::Unload;
require DBIx::Class;
-our $VERSION = '0.04999_05';
+our $VERSION = '0.04999_06';
__PACKAGE__->mk_ro_accessors(qw/
schema
$self->_make_src_class($_) for @tables;
$self->_setup_src_meta($_) for @tables;
- my %moniker_class = map { $self->monikers->{$_} => $self->classes->{$_} } @tables;
-
if(!$self->skip_relationships) {
- # Dump and load what we have so far, so the relationship loader
- # can get at it, but be quiet
+ # The relationship loader needs a working schema
$self->{quiet} = 1;
- $self->_dump_to_dir(values %moniker_class);
- $self->_reload_classes(\%moniker_class);
+ $self->_reload_classes(@tables);
$self->_load_relationships($_) for @tables;
$self->{quiet} = 0;
}
$self->_load_external($_)
for map { $self->classes->{$_} } @tables;
- $self->_dump_to_dir(values %moniker_class);
-
- # Make sure stuff gets reloaded
- $self->_reload_classes(\%moniker_class);
+ $self->_reload_classes(@tables);
# Drop temporary cache
delete $self->{_cache};
}
sub _reload_classes {
- my ($self, $moniker_class) = @_;
+ my ($self, @tables) = @_;
+
+ $self->_dump_to_dir(map { $self->classes->{$_} } @tables);
- while (my ($moniker, $class) = each %$moniker_class) {
- if ( Class::Unload->unload( $class ) ) {
- my $resultset_class = ref $self->schema->resultset($moniker);
- Class::Unload->unload( $resultset_class )
- if $resultset_class ne 'DBIx::Class::ResultSet';
+ for my $table (@tables) {
+ my $moniker = $self->monikers->{$table};
+ my $class = $self->classes->{$table};
+
+ {
+ no warnings 'redefine';
+ local *Class::C3::reinitialize = sub {};
+ use warnings;
+
+ if ( Class::Unload->unload( $class ) ) {
+ my $resultset_class = ref $self->schema->resultset($moniker);
+ Class::Unload->unload( $resultset_class )
+ if $resultset_class ne 'DBIx::Class::ResultSet';
+ }
+ $class->require or die "Can't load $class: $@";
}
- $class->require or die "Can't load $class: $@";
$self->schema_class->register_class($moniker, $class);
$self->schema->register_class($moniker, $class)