From: Alexander Hartmaier Date: Thu, 17 Dec 2009 22:22:07 +0000 (+0000) Subject: Views without a view_definition won't be added to the SQL::Translator::Schema by... X-Git-Tag: v0.08116~90^2~6 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class.git;a=commitdiff_plain;h=8f1617e23a195d3730e821d3dda2eeb913b99b22 Views without a view_definition won't be added to the SQL::Translator::Schema by the parser + tests --- diff --git a/Changes b/Changes index 9a3ba9d..a1fcfe1 100644 --- 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) diff --git a/lib/SQL/Translator/Parser/DBIx/Class.pm b/lib/SQL/Translator/Parser/DBIx/Class.pm index bb40c91..40389b3 100644 --- a/lib/SQL/Translator/Parser/DBIx/Class.pm +++ b/lib/SQL/Translator/Parser/DBIx/Class.pm @@ -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 ], diff --git a/t/99dbic_sqlt_parser.t b/t/99dbic_sqlt_parser.t index d4b1a9f..c146649 100644 --- a/t/99dbic_sqlt_parser.t +++ b/t/99dbic_sqlt_parser.t @@ -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 { diff --git a/t/lib/DBICTest/Schema.pm b/t/lib/DBICTest/Schema.pm index a3e4484..d6d03b5 100644 --- a/t/lib/DBICTest/Schema.pm +++ b/t/lib/DBICTest/Schema.pm @@ -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 index 0000000..bf7783a --- /dev/null +++ b/t/lib/DBICTest/Schema/NoViewDefinition.pm @@ -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;