Views without a view_definition won't be added to the SQL::Translator::Schema by...
Alexander Hartmaier [Thu, 17 Dec 2009 22:22:07 +0000 (22:22 +0000)]
Changes
lib/SQL/Translator/Parser/DBIx/Class.pm
t/99dbic_sqlt_parser.t
t/lib/DBICTest/Schema.pm
t/lib/DBICTest/Schema/NoViewDefinition.pm [new file with mode: 0644]

diff --git a/Changes b/Changes
index 9a3ba9d..a1fcfe1 100644 (file)
--- a/Changes
+++ b/Changes
@@ -3,6 +3,8 @@ Revision history for DBIx::Class
         - might_have/has_one now warn if applied calling class's column
           has is_nullable set to true.
         - Cookbook POD fix for add_drop_table instead of add_drop_tables
+        - Views without a view_definition won't be added to the
+          SQL::Translator::Schema by the parser
 
 0.08115 2009-12-10 09:02:00 (CST)
         - Real limit/offset support for MSSQL server (via Row_Number)
index bb40c91..40389b3 100644 (file)
@@ -289,6 +289,8 @@ EOW
         # Its possible to have multiple DBIC source using same table
         next if $views{$view_name}++;
 
+        next unless $source->view_definition;
+
         my $view = $schema->add_view (
           name => $view_name,
           fields => [ $source->columns ],
index d4b1a9f..c146649 100644 (file)
@@ -15,10 +15,10 @@ BEGIN {
 my $schema = DBICTest->init_schema();
 # Dummy was yanked out by the sqlt hook test
 # CustomSql tests the horrific/deprecated ->name(\$sql) hack
-# YearXXXXCDs are views
+# YearXXXXCDs and NoViewDefinition are views
 #
 my @sources = grep
-  { $_ !~ /^ (?: Dummy | CustomSql | Year\d{4}CDs ) $/x }
+  { $_ !~ /^ (?: Dummy | CustomSql | Year\d{4}CDs | NoViewDefinition ) $/x }
   $schema->sources
 ;
 
@@ -62,6 +62,31 @@ my @sources = grep
        }
 }
 
+{ 
+    #my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { } } });
+       my $sqlt_schema = create_schema({ schema => $schema });
+    
+    my @views = $sqlt_schema->get_views;
+
+    # the following views are skipped:
+    # Year1999CDs is virtual
+    # NoViewDefinition has no view_definition
+    is(scalar @views, 1, "number of views ok");
+
+    foreach my $view (@views) {
+        ok($view->is_valid, "view " . $view->name . " is valid");
+    }
+
+    my @expected_view_names = (qw/ year2000cds /);
+    my @view_names = sort map { $_->name } @views;
+
+    is_deeply( @view_names, @expected_view_names, "all expected views included int SQL::Translator schema" );
+    
+    #use Data::Dumper::Concise;
+    #warn Dumper(@view_names);
+    #is($view->error, undef, 'view with a view_definition is skipped.');
+}
+
 done_testing;
 
 sub create_schema {
index a3e4484..d6d03b5 100644 (file)
@@ -22,6 +22,7 @@ __PACKAGE__->load_classes(qw/
   Year1999CDs
   CustomSql
   Money
+  NoViewDefinition
   /,
   { 'DBICTest::Schema' => [qw/
     LinerNotes
diff --git a/t/lib/DBICTest/Schema/NoViewDefinition.pm b/t/lib/DBICTest/Schema/NoViewDefinition.pm
new file mode 100644 (file)
index 0000000..bf7783a
--- /dev/null
@@ -0,0 +1,9 @@
+package # hide from PAUSE
+    DBICTest::Schema::NoViewDefinition;
+
+use base qw/DBICTest::BaseResult/;
+
+__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
+__PACKAGE__->table('noviewdefinition');
+
+1;