X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class.git;a=blobdiff_plain;f=t%2F99dbic_sqlt_parser.t;h=f8b88c349025907b1187d275c8e9c48567071f55;hp=34547db40246e6e5f3aac1e0de13d18c9564def9;hb=a7f4b74cf7a4e82dcf4ef3847c5881f6dad361c9;hpb=2581038c9cf626bdf53a518429a1fe3ecbf42603 diff --git a/t/99dbic_sqlt_parser.t b/t/99dbic_sqlt_parser.t index 34547db..f8b88c3 100644 --- a/t/99dbic_sqlt_parser.t +++ b/t/99dbic_sqlt_parser.t @@ -1,74 +1,133 @@ -#!/usr/bin/perl use strict; use warnings; + use Test::More; +use Test::Exception; use lib qw(t/lib); use DBICTest; BEGIN { - eval "use DBD::mysql; use SQL::Translator 0.09;"; - plan $@ - ? ( skip_all => 'needs SQL::Translator 0.09 for testing' ) - : ( tests => 99 ); + require DBIx::Class::Storage::DBI; + plan skip_all => + 'Test needs SQL::Translator ' . DBIx::Class::Storage::DBI->_sqlt_minimum_version + if not DBIx::Class::Storage::DBI->_sqlt_version_ok; } 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 +# +my @sources = grep + { $_ !~ /^ (?: Dummy | CustomSql | Year\d{4}CDs ) $/x } + $schema->sources +; { - my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { } } }); + my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { } } }); - foreach my $source ($schema->sources) { - my $table = $sqlt_schema->get_table($schema->source($source)->from); + foreach my $source (@sources) { + my $table = get_table($sqlt_schema, $schema, $source); - my $fk_count = scalar(grep { $_->type eq 'FOREIGN KEY' } $table->get_constraints); - my @indices = $table->get_indices; - my $index_count = scalar(@indices); + my $fk_count = scalar(grep { $_->type eq 'FOREIGN KEY' } $table->get_constraints); + my @indices = $table->get_indices; + my $index_count = scalar(@indices); $index_count++ if ($source eq 'TwoKeys'); # TwoKeys has the index turned off on the rel def - is($index_count, $fk_count, "correct number of indices for $source with no args"); - } + is($index_count, $fk_count, "correct number of indices for $source with no args"); + } } { - my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { add_fk_index => 1 } } }); + my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { add_fk_index => 1 } } }); - foreach my $source ($schema->sources) { - my $table = $sqlt_schema->get_table($schema->source($source)->from); + foreach my $source (@sources) { + my $table = get_table($sqlt_schema, $schema, $source); - my $fk_count = scalar(grep { $_->type eq 'FOREIGN KEY' } $table->get_constraints); - my @indices = $table->get_indices; - my $index_count = scalar(@indices); + my $fk_count = scalar(grep { $_->type eq 'FOREIGN KEY' } $table->get_constraints); + my @indices = $table->get_indices; + my $index_count = scalar(@indices); $index_count++ if ($source eq 'TwoKeys'); # TwoKeys has the index turned off on the rel def - is($index_count, $fk_count, "correct number of indices for $source with add_fk_index => 1"); - } + is($index_count, $fk_count, "correct number of indices for $source with add_fk_index => 1"); + } } { - my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { add_fk_index => 0 } } }); + my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { add_fk_index => 0 } } }); + + foreach my $source (@sources) { + my $table = get_table($sqlt_schema, $schema, $source); + + my @indices = $table->get_indices; + my $index_count = scalar(@indices); + is($index_count, 0, "correct number of indices for $source with add_fk_index => 0"); + } +} + +{ + { + package # hide from PAUSE + DBICTest::Schema::NoViewDefinition; + + use base qw/DBICTest::BaseResult/; + + __PACKAGE__->table_class('DBIx::Class::ResultSource::View'); + __PACKAGE__->table('noviewdefinition'); + + 1; + } - foreach my $source ($schema->sources) { - my $table = $sqlt_schema->get_table($schema->source($source)->from); + my $schema_invalid_view = $schema->clone; + $schema_invalid_view->register_class('NoViewDefinition', 'DBICTest::Schema::NoViewDefinition'); - my @indices = $table->get_indices; - my $index_count = scalar(@indices); - is($index_count, 0, "correct number of indices for $source with add_fk_index => 0"); - } + throws_ok { create_schema({ schema => $schema_invalid_view }) } + qr/view noviewdefinition is missing a view_definition/, + 'parser detects views with a view_definition'; } +lives_ok (sub { + my $sqlt_schema = create_schema ({ + schema => $schema, + args => { + parser_args => { + sources => ['CD'] + }, + }, + }); + + is_deeply ( + [$sqlt_schema->get_tables ], + ['cd'], + 'sources limitng with relationships works', + ); + +}); + +done_testing; + sub create_schema { - my $args = shift; + my $args = shift; - my $schema = $args->{schema}; - my $additional_sqltargs = $args->{args} || {}; + my $schema = $args->{schema}; + my $additional_sqltargs = $args->{args} || {}; + + my $sqltargs = { + add_drop_table => 1, + ignore_constraint_names => 1, + ignore_index_names => 1, + %{$additional_sqltargs} + }; + + my $sqlt = SQL::Translator->new( $sqltargs ); + + $sqlt->parser('SQL::Translator::Parser::DBIx::Class'); + return $sqlt->translate({ data => $schema }) || die $sqlt->error; +} - my $sqltargs = { - add_drop_table => 1, - ignore_constraint_names => 1, - ignore_index_names => 1, - %{$additional_sqltargs} - }; +sub get_table { + my ($sqlt_schema, $schema, $source) = @_; - my $sqlt = SQL::Translator->new( $sqltargs ); + my $table_name = $schema->source($source)->from; + $table_name = $$table_name if ref $table_name; - $sqlt->parser('SQL::Translator::Parser::DBIx::Class'); - return $sqlt->translate({ data => $schema }) or die $sqlt->error; + return $sqlt_schema->get_table($table_name); }