X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F10_05ora_common.t;h=c63f9e39c44faf49adf2f66a53d14cf1b37985fc;hb=0fccc53b6fe709fd05f739fa5ffa17fb617dd753;hp=74e0e0d40417e4acb6b74cdabd78d948581918c1;hpb=1de9c8e18dde9ef2accda369fe8616c230583eb2;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/t/10_05ora_common.t b/t/10_05ora_common.t index 74e0e0d..c63f9e3 100644 --- a/t/10_05ora_common.t +++ b/t/10_05ora_common.t @@ -1,3 +1,6 @@ +use DBIx::Class::Schema::Loader::Optional::Dependencies + -skip_all_without => 'test_rdbms_oracle'; + use strict; use warnings; use Test::More; @@ -26,7 +29,7 @@ my $auto_inc_cb = sub { return ( qq{ CREATE SEQUENCE ${table}_${col}_seq START WITH 1 INCREMENT BY 1}, qq{ - CREATE OR REPLACE TRIGGER ${table}_${col}_trigger + CREATE OR REPLACE TRIGGER ${table}_${col}_trg BEFORE INSERT ON ${table} FOR EACH ROW BEGIN @@ -41,7 +44,7 @@ my $auto_inc_drop_cb = sub { return qq{ DROP SEQUENCE ${table}_${col}_seq }; }; -my $tester = dbixcsl_common_tests->new( +dbixcsl_common_tests->new( vendor => 'Oracle', auto_inc_pk => 'INTEGER NOT NULL PRIMARY KEY', auto_inc_cb => $auto_inc_cb, @@ -180,9 +183,22 @@ my $tester = dbixcsl_common_tests->new( on delete set null deferrable ) }, + q{ + create table oracle_loader_test11 ( + id int primary key disable, + ten_id int unique disable, + foreign key (ten_id) references oracle_loader_test10(id) disable + ) + }, + $auto_inc_cb->('oracle_loader_test11', 'id'), + 'alter trigger oracle_loader_test11_id_trg disable', + 'CREATE VIEW oracle_loader_test12 AS SELECT * FROM oracle_loader_test1', + ], + pre_drop_ddl => [ + 'DROP VIEW oracle_loader_test12', ], - drop => [qw/oracle_loader_test1 oracle_loader_test9 oracle_loader_test10/], - count => 7 + 31 * 2, + drop => [qw/oracle_loader_test1 oracle_loader_test9 oracle_loader_test10 oracle_loader_test11/], + count => 12 + 31 * 2, # basic + cross-schema * 2 run => sub { my ($monikers, $classes); ($schema, $monikers, $classes) = @_; @@ -222,6 +238,27 @@ my $tester = dbixcsl_common_tests->new( is $rel_info->{attrs}{is_deferrable}, 1, 'DEFERRABLE clause introspected correctly'; + my $source11 = $schema->source('OracleLoaderTest11'); + + # DBD::Oracle < 1.76 doesn't filter out disabled primary keys + my $uniqs = eval { DBD::Oracle->VERSION('1.76') } ? [] : ['primary']; + is_deeply [keys %{{$source11->unique_constraints}}], $uniqs, + 'Disabled unique constraints not loaded'; + + ok !$source11->relationship_info('ten'), + 'Disabled FK not loaded'; + + ok !$source11->column_info('id')->{is_auto_increment}, + 'Disabled autoinc trigger not loaded'; + + my $view_source = $schema->resultset($monikers->{oracle_loader_test12})->result_source; + isa_ok $view_source, 'DBIx::Class::ResultSource::View', + 'view result source'; + + like $view_source->view_definition, + qr/\A \s* select\b .* \bfrom \s+ oracle_loader_test1 \s* \z/imsx, + 'view definition'; + SKIP: { skip 'Set the DBICTEST_ORA_EXTRAUSER_DSN, _USER and _PASS environment variables to run the cross-schema relationship tests', 31 * 2 unless $ENV{DBICTEST_ORA_EXTRAUSER_DSN}; @@ -470,45 +507,41 @@ EOF } }, }, -); +)->run_tests(); -if( !$dsn || !$user ) { - $tester->skip_tests('You need to set the DBICTEST_ORA_DSN, _USER, and _PASS environment variables'); -} -else { - $tester->run_tests(); -} END { if (not $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}) { - if (my $dbh2 = try { $extra_schema->storage->dbh }) { - my $dbh1 = $schema->storage->dbh; - - try { - $dbh1->do($_) for $auto_inc_drop_cb->('oracle_loader_test8', 'id'); - $dbh2->do($_) for $auto_inc_drop_cb->('oracle_loader_test7', 'id'); - $dbh2->do($_) for $auto_inc_drop_cb->('oracle_loader_test6', 'id'); - $dbh2->do($_) for $auto_inc_drop_cb->('oracle_loader_test5', 'pk'); - $dbh1->do($_) for $auto_inc_drop_cb->('oracle_loader_test5', 'id'); - $dbh1->do($_) for $auto_inc_drop_cb->('oracle_loader_test4', 'id'); - } - catch { - die "Error dropping sequences for cross-schema test tables: $_"; - }; - - try { - $dbh1->do('DROP TABLE oracle_loader_test8'); - $dbh2->do('DROP TABLE oracle_loader_test7'); - $dbh2->do('DROP TABLE oracle_loader_test6'); - $dbh2->do('DROP TABLE oracle_loader_test5'); - $dbh1->do('DROP TABLE oracle_loader_test5'); - $dbh1->do('DROP TABLE oracle_loader_test4'); + if (my $dbh1 = try { $schema->storage->dbh }) { + $dbh1->do($_) for $auto_inc_drop_cb->('oracle_loader_test11','id'); + + if (my $dbh2 = try { $extra_schema->storage->dbh }) { + + try { + $dbh1->do($_) for $auto_inc_drop_cb->('oracle_loader_test8', 'id'); + $dbh2->do($_) for $auto_inc_drop_cb->('oracle_loader_test7', 'id'); + $dbh2->do($_) for $auto_inc_drop_cb->('oracle_loader_test6', 'id'); + $dbh2->do($_) for $auto_inc_drop_cb->('oracle_loader_test5', 'pk'); + $dbh1->do($_) for $auto_inc_drop_cb->('oracle_loader_test5', 'id'); + $dbh1->do($_) for $auto_inc_drop_cb->('oracle_loader_test4', 'id'); + } + catch { + die "Error dropping sequences for cross-schema test tables: $_"; + }; + + try { + $dbh1->do('DROP TABLE oracle_loader_test8'); + $dbh2->do('DROP TABLE oracle_loader_test7'); + $dbh2->do('DROP TABLE oracle_loader_test6'); + $dbh2->do('DROP TABLE oracle_loader_test5'); + $dbh1->do('DROP TABLE oracle_loader_test5'); + $dbh1->do('DROP TABLE oracle_loader_test4'); + } + catch { + die "Error dropping cross-schema test tables: $_"; + }; } - catch { - die "Error dropping cross-schema test tables: $_"; - }; } - rmtree EXTRA_DUMP_DIR; } }