From: Jess Robinson <castaway@desert-island.me.uk>
Date: Wed, 11 Feb 2009 14:38:08 +0000 (+0000)
Subject: Merge 'view_support' into 'views'
X-Git-Tag: v0.08240~88^2~4
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ed899df367fc90a6b30f1e17d0ea4e2bc2e094f6;p=dbsrgits%2FDBIx-Class.git

Merge 'view_support' into 'views'

Original code
---

ed899df367fc90a6b30f1e17d0ea4e2bc2e094f6
diff --cc lib/SQL/Translator/Parser/DBIx/Class.pm
index 2b408e2,63cbf92..835edbb
--- a/lib/SQL/Translator/Parser/DBIx/Class.pm
+++ b/lib/SQL/Translator/Parser/DBIx/Class.pm
@@@ -65,8 -65,18 +65,19 @@@ sub parse 
          @monikers = grep { $sources->{$_} } @monikers;
      }
  
 +
-     foreach my $moniker (sort @monikers)
+     my(@table_monikers, @view_monikers);
+     for my $moniker (@monikers){
+       my $source = $dbicschema->source($moniker);
+       next if $source->is_virtual;
+        if ( $source->isa('DBIx::Class::ResultSource::Table') ) {
+          push(@table_monikers, $moniker);
+       } elsif( $source->isa('DBIx::Class::ResultSource::View') ){
+          push(@view_monikers, $moniker);
+       }
+     }
+ 
+     foreach my $moniker (sort @table_monikers)
      {
          my $source = $dbicschema->source($moniker);
          
@@@ -215,9 -224,31 +226,28 @@@
              }
          }
  		
 -        if ($source->result_class->can('sqlt_deploy_hook')) {
 -          $source->result_class->sqlt_deploy_hook($table);
 -        }
 +        $source->_invoke_sqlt_deploy_hook($table);
      }
  
+     foreach my $moniker (sort @view_monikers)
+     {
+         my $source = $dbicschema->source($moniker);
+         # Skip custom query sources
+         next if ref($source->name);
+ 
+         # Its possible to have multiple DBIC source using same table
+         next if $seen_tables{$source->name}++;
+ 
+         my $view = $schema->add_view(
+           name => $source->name,
+           fields => [ $source->columns ],
+           $source->view_definition ? ( 'sql' => $source->view_definition ) : ()
+         );
+         if ($source->result_class->can('sqlt_deploy_hook')) {
+           $source->result_class->sqlt_deploy_hook($view);
+         }
+     }
+ 
 -
      if ($dbicschema->can('sqlt_deploy_hook')) {
        $dbicschema->sqlt_deploy_hook($schema);
      }