Bump version for release
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / Base.pm
index 77dcd29..e9198f5 100644 (file)
@@ -17,7 +17,7 @@ use File::Temp qw//;
 use Class::Unload;
 require DBIx::Class;
 
-our $VERSION = '0.04999_05';
+our $VERSION = '0.04999_06';
 
 __PACKAGE__->mk_ro_accessors(qw/
                                 schema
@@ -385,14 +385,10 @@ sub _load_tables {
     $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;
     }
@@ -400,10 +396,7 @@ sub _load_tables {
     $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};
@@ -412,15 +405,26 @@ sub _load_tables {
 }
 
 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)