X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Flib%2Fdbixcsl_common_tests.pm;h=2495b3b4ab00a8ff143fabac243b71fa96263af6;hb=26f1c8c92bdbd5bf27e48005a1f3291ee7731a70;hp=d1d3d48b5a7a9f0c204072601ac8aecc9e665c9d;hpb=8563178e7c3740216a35b292ec7ab6860b81599b;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/t/lib/dbixcsl_common_tests.pm b/t/lib/dbixcsl_common_tests.pm index d1d3d48..2495b3b 100644 --- a/t/lib/dbixcsl_common_tests.pm +++ b/t/lib/dbixcsl_common_tests.pm @@ -34,10 +34,16 @@ sub skip_tests { plan skip_all => $why; } +sub _monikerize { + my $name = shift; + return 'LoaderTest2X' if $name =~ /^loader_test2$/i; + return undef; +} + sub run_tests { my $self = shift; - plan tests => 49; + plan tests => 97; $self->create(); @@ -45,34 +51,62 @@ sub run_tests { my $debug = ($self->{verbose} > 1) ? 1 : 0; + my @connect_info = ( $self->{dsn}, $self->{user}, $self->{password} ); my %loader_opts = ( - dsn => $self->{dsn}, - user => $self->{user}, - password => $self->{password}, - constraint => '^(?:\S+\.)?(?i:loader_test)[0-9]+$', + constraint => qr/^(?:\S+\.)?loader_test[0-9]+$/i, relationships => 1, additional_classes => 'TestAdditional', additional_base_classes => 'TestAdditionalBase', left_base_classes => [ qw/TestLeftBase/ ], components => [ qw/TestComponent/ ], - resultset_components => [ qw/TestRSComponent/ ], + inflect_plural => { loader_test4 => 'loader_test4zes' }, + inflect_singular => { fkid => 'fkid_singular' }, + moniker_map => \&_monikerize, debug => $debug, ); $loader_opts{db_schema} = $self->{db_schema} if $self->{db_schema}; - $loader_opts{drop_db_schema} = $self->{drop_db_schema} if $self->{drop_db_schema}; - - eval qq{ - package $schema_class; - use base qw/DBIx::Class::Schema::Loader/; + eval { require Class::Inspector }; + if($@) { + $self->{_no_rs_components} = 1; + } + else { + $loader_opts{resultset_components} = [ qw/TestRSComponent/ ]; + } - __PACKAGE__->load_from_connection(\%loader_opts); - }; - ok(!$@, "Loader initialization") or diag $@; + { + my @loader_warnings; + local $SIG{__WARN__} = sub { push(@loader_warnings, $_[0]); }; + eval qq{ + package $schema_class; + use base qw/DBIx::Class::Schema::Loader/; + + __PACKAGE__->loader_options(\%loader_opts); + __PACKAGE__->connection(\@connect_info); + }; + ok(!$@, "Loader initialization") or diag $@; + if($self->{skip_rels}) { + is(scalar(@loader_warnings), 0) + or diag "Did not get the expected 0 warnings. Warnings are: " + . join('',@loader_warnings); + ok(1); + } + else { + is(scalar(@loader_warnings), 1) + or diag "Did not get the expected 1 warning. Warnings are: " + . join('',@loader_warnings); + like($loader_warnings[0], qr/loader_test9 has no primary key/i); + } + } - my $conn = $schema_class->connect($self->{dsn},$self->{user},$self->{password}); - my $monikers = $schema_class->loader->monikers; - my $classes = $schema_class->loader->classes; + my $conn = $schema_class->clone; + my $monikers = {}; + my $classes = {}; + foreach my $source_name ($schema_class->sources) { + my $table_name = $schema_class->source($source_name)->from; + $monikers->{$table_name} = $source_name; + $classes->{$table_name} = $schema_class . q{::} . $source_name; + } my $moniker1 = $monikers->{loader_test1}; my $class1 = $classes->{loader_test1}; @@ -82,8 +116,49 @@ sub run_tests { my $class2 = $classes->{loader_test2}; my $rsobj2 = $conn->resultset($moniker2); + my $moniker23 = $monikers->{LOADER_TEST23}; + my $class23 = $classes->{LOADER_TEST23}; + my $rsobj23 = $conn->resultset($moniker1); + + my $moniker24 = $monikers->{LoAdEr_test24}; + my $class24 = $classes->{LoAdEr_test24}; + my $rsobj24 = $conn->resultset($moniker2); + isa_ok( $rsobj1, "DBIx::Class::ResultSet" ); isa_ok( $rsobj2, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj23, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj24, "DBIx::Class::ResultSet" ); + + my @columns_lt2 = $class2->columns; + is($columns_lt2[0], 'id', "Column Ordering 0"); + is($columns_lt2[1], 'dat', "Column Ordering 1"); + is($columns_lt2[2], 'dat2', "Column Ordering 2"); + + my %uniq1 = $class1->unique_constraints; + my $uniq1_test = 0; + foreach my $ucname (keys %uniq1) { + my $cols_arrayref = $uniq1{$ucname}; + if(@$cols_arrayref == 1 && $cols_arrayref->[0] eq 'dat') { + $uniq1_test = 1; + last; + } + } + ok($uniq1_test) or diag "Unique constraints not working"; + + my %uniq2 = $class2->unique_constraints; + my $uniq2_test = 0; + foreach my $ucname (keys %uniq2) { + my $cols_arrayref = $uniq2{$ucname}; + if(@$cols_arrayref == 2 + && $cols_arrayref->[0] eq 'dat2' + && $cols_arrayref->[1] eq 'dat') { + $uniq2_test = 2; + last; + } + } + ok($uniq2_test) or diag "Multi-col unique constraints not working"; + + is($moniker2, 'LoaderTest2X', "moniker_map testing"); { my ($skip_tab, $skip_tabo, $skip_taba, $skip_cmeth, @@ -93,13 +168,12 @@ sub run_tests { can_ok( $class1, 'test_additional_base_override' ) or $skip_tabo = 1; can_ok( $class1, 'test_additional_base_additional' ) or $skip_taba = 1; can_ok( $class1, 'dbix_class_testcomponent' ) or $skip_tcomp = 1; - can_ok( $rsobj1, 'dbix_class_testrscomponent' ) or $skip_trscomp = 1; can_ok( $class1, 'loader_test1_classmeth' ) or $skip_cmeth = 1; - TODO: { - local $TODO = "Not yet supported by ResultSetManger code"; + TODO: { + local $TODO = "Not yet supported by ResultSetManger code"; can_ok( $rsobj1, 'loader_test1_rsmeth' ) or $skip_rsmeth = 1; - } + } SKIP: { skip "Pre-requisite test failed", 1 if $skip_tab; @@ -127,9 +201,14 @@ sub run_tests { } SKIP: { - skip "Pre-requisite test failed", 1 if $skip_trscomp; - is( $rsobj1->dbix_class_testrscomponent, - 'dbix_class_testrscomponent works' ); + skip "These two tests need Class::Inspector installed", 2 + if $self->{_no_rs_components}; + can_ok($rsobj1, 'dbix_class_testrscomponent') or $skip_trscomp = 1; + SKIP: { + skip "Pre-requisite test failed", 1 if $skip_trscomp; + is( $rsobj1->dbix_class_testrscomponent, + 'dbix_class_testrscomponent works' ); + } } SKIP: { @@ -149,12 +228,23 @@ sub run_tests { is( $obj->id, 1 ); is( $obj->dat, "foo" ); is( $rsobj2->count, 4 ); + my $saved_id; + eval { + my $new_obj1 = $rsobj1->create({ dat => 'newthing' }); + $saved_id = $new_obj1->id; + }; + ok(!$@) or diag "Died during create new record using a PK::Auto key: $@"; + ok($saved_id) or diag "Failed to get PK::Auto-generated id"; + + my $new_obj1 = $rsobj1->search({ dat => 'newthing' })->first; + ok($new_obj1) or diag "Cannot find newly inserted PK::Auto record"; + is($new_obj1->id, $saved_id); - my ($obj2) = $rsobj2->find( dat => 'bbb' ); + my ($obj2) = $rsobj2->search({ dat => 'bbb' })->first; is( $obj2->id, 2 ); SKIP: { - skip $self->{skip_rels}, 29 if $self->{skip_rels}; + skip $self->{skip_rels}, 42 if $self->{skip_rels}; my $moniker3 = $monikers->{loader_test3}; my $class3 = $classes->{loader_test3}; @@ -184,6 +274,54 @@ sub run_tests { my $class9 = $classes->{loader_test9}; my $rsobj9 = $conn->resultset($moniker9); + my $moniker16 = $monikers->{loader_test16}; + my $class16 = $classes->{loader_test16}; + my $rsobj16 = $conn->resultset($moniker16); + + my $moniker17 = $monikers->{loader_test17}; + my $class17 = $classes->{loader_test17}; + my $rsobj17 = $conn->resultset($moniker17); + + my $moniker18 = $monikers->{loader_test18}; + my $class18 = $classes->{loader_test18}; + my $rsobj18 = $conn->resultset($moniker18); + + my $moniker19 = $monikers->{loader_test19}; + my $class19 = $classes->{loader_test19}; + my $rsobj19 = $conn->resultset($moniker19); + + my $moniker20 = $monikers->{loader_test20}; + my $class20 = $classes->{loader_test20}; + my $rsobj20 = $conn->resultset($moniker20); + + my $moniker21 = $monikers->{loader_test21}; + my $class21 = $classes->{loader_test21}; + my $rsobj21 = $conn->resultset($moniker21); + + my $moniker22 = $monikers->{loader_test22}; + my $class22 = $classes->{loader_test22}; + my $rsobj22 = $conn->resultset($moniker22); + + my $moniker25 = $monikers->{loader_test25}; + my $class25 = $classes->{loader_test25}; + my $rsobj25 = $conn->resultset($moniker25); + + my $moniker26 = $monikers->{loader_test26}; + my $class26 = $classes->{loader_test26}; + my $rsobj26 = $conn->resultset($moniker26); + + my $moniker27 = $monikers->{loader_test27}; + my $class27 = $classes->{loader_test27}; + my $rsobj27 = $conn->resultset($moniker27); + + my $moniker28 = $monikers->{loader_test28}; + my $class28 = $classes->{loader_test28}; + my $rsobj28 = $conn->resultset($moniker28); + + my $moniker29 = $monikers->{loader_test29}; + my $class29 = $classes->{loader_test29}; + my $rsobj29 = $conn->resultset($moniker29); + isa_ok( $rsobj3, "DBIx::Class::ResultSet" ); isa_ok( $rsobj4, "DBIx::Class::ResultSet" ); isa_ok( $rsobj5, "DBIx::Class::ResultSet" ); @@ -191,18 +329,30 @@ sub run_tests { isa_ok( $rsobj7, "DBIx::Class::ResultSet" ); isa_ok( $rsobj8, "DBIx::Class::ResultSet" ); isa_ok( $rsobj9, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj16, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj17, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj18, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj19, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj20, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj21, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj22, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj25, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj26, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj27, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj28, "DBIx::Class::ResultSet" ); + isa_ok( $rsobj29, "DBIx::Class::ResultSet" ); # basic rel test my $obj4 = $rsobj4->find(123); - isa_ok( $obj4->fkid, $class3); + isa_ok( $obj4->fkid_singular, $class3); my $obj3 = $rsobj3->find(1); - my $rs_rel4 = $obj3->search_related('loader_test4s'); + my $rs_rel4 = $obj3->search_related('loader_test4zes'); isa_ok( $rs_rel4->first, $class4); - # fk def in comments should not be parsed - my $obj5 = $rsobj5->find( id1 => 1, id2 => 1 ); - is( ref( $obj5->id2 ), '' ); + # find on multi-col pk + my $obj5 = $rsobj5->find({id1 => 1, id2 => 1}); + is( $obj5->id2, 1 ); # mulit-col fk def my $obj6 = $rsobj6->find(1); @@ -213,6 +363,56 @@ sub run_tests { my $obj8 = $rsobj8->find(1); isa_ok( $obj8->loader_test7, $class7); + # test double-fk 17 ->-> 16 + my $obj17 = $rsobj17->find(33); + + my $rs_rel16_one = $obj17->loader16_one; + isa_ok($rs_rel16_one, $class16); + is($rs_rel16_one->dat, 'y16'); + + my $rs_rel16_two = $obj17->loader16_two; + isa_ok($rs_rel16_two, $class16); + is($rs_rel16_two->dat, 'z16'); + + my $obj16 = $rsobj16->find(2); + my $rs_rel17 = $obj16->search_related('loader_test17_loader16_ones'); + isa_ok($rs_rel17->first, $class17); + is($rs_rel17->first->id, 3); + + # XXX test m:m 18 <- 20 -> 19 + + # XXX test double-fk m:m 21 <- 22 -> 21 + + # test double multi-col fk 26 -> 25 + my $obj26 = $rsobj26->find(33); + + my $rs_rel25_one = $obj26->loader_test25_id_rel1; + isa_ok($rs_rel25_one, $class25); + is($rs_rel25_one->dat, 'x25'); + + my $rs_rel25_two = $obj26->loader_test25_id_rel2; + isa_ok($rs_rel25_two, $class25); + is($rs_rel25_two->dat, 'y25'); + + my $obj25 = $rsobj25->find(3,42); + my $rs_rel26 = $obj25->search_related('loader_test26_id_rel1s'); + isa_ok($rs_rel26->first, $class26); + is($rs_rel26->first->id, 3); + + # test one-to-one rels + my $obj27 = $rsobj27->find(1); + my $obj28 = $obj27->loader_test28; + isa_ok($obj28, $class28); + is($obj28->get_column('id'), 1); + + my $obj29 = $obj27->loader_test29; + isa_ok($obj29, $class29); + is($obj29->id, 1); + + $obj27 = $rsobj27->find(2); + is($obj27->loader_test28, undef); + is($obj27->loader_test29, undef); + # from Chisel's tests... SKIP: { if($self->{vendor} =~ /sqlite/i) { @@ -300,6 +500,36 @@ sub run_tests { isa_ok( $obj15->loader_test14, $class14 ); } } + + # rescan test + SKIP: { + skip $self->{skip_rels}, 4 if $self->{skip_rels}; + + my @statements_rescan = ( + qq{ + CREATE TABLE loader_test30 ( + id INTEGER NOT NULL PRIMARY KEY, + loader_test2 INTEGER NOT NULL, + FOREIGN KEY (loader_test2) REFERENCES loader_test2 (id) + ) $self->{innodb} + }, + q{ INSERT INTO loader_test30 (id,loader_test2) VALUES(123, 1) }, + q{ INSERT INTO loader_test30 (id,loader_test2) VALUES(321, 2) }, + ); + + my $dbh = $self->dbconnect(1); + $dbh->do($_) for @statements_rescan; + $dbh->disconnect; + + my @new = $conn->rescan; + is(scalar(@new), 1); + is($new[0], 'LoaderTest30'); + + my $rsobj30 = $conn->resultset('LoaderTest30'); + isa_ok($rsobj30, 'DBIx::Class::ResultSet'); + my $obj30 = $rsobj30->find(123); + isa_ok( $obj30->loader_test2, $class2); + } } sub dbconnect { @@ -323,11 +553,13 @@ sub dbconnect { sub create { my $self = shift; + $self->{_created} = 1; + my @statements = ( qq{ CREATE TABLE loader_test1 ( id $self->{auto_inc_pk}, - dat VARCHAR(32) + dat VARCHAR(32) NOT NULL UNIQUE ) $self->{innodb} }, @@ -338,14 +570,30 @@ sub create { qq{ CREATE TABLE loader_test2 ( id $self->{auto_inc_pk}, - dat VARCHAR(32) + dat VARCHAR(32) NOT NULL, + dat2 VARCHAR(32) NOT NULL, + UNIQUE (dat2, dat) ) $self->{innodb} }, - q{ INSERT INTO loader_test2 (dat) VALUES('aaa') }, - q{ INSERT INTO loader_test2 (dat) VALUES('bbb') }, - q{ INSERT INTO loader_test2 (dat) VALUES('ccc') }, - q{ INSERT INTO loader_test2 (dat) VALUES('ddd') }, + q{ INSERT INTO loader_test2 (dat, dat2) VALUES('aaa', 'zzz') }, + q{ INSERT INTO loader_test2 (dat, dat2) VALUES('bbb', 'yyy') }, + q{ INSERT INTO loader_test2 (dat, dat2) VALUES('ccc', 'xxx') }, + q{ INSERT INTO loader_test2 (dat, dat2) VALUES('ddd', 'www') }, + + qq{ + CREATE TABLE LOADER_TEST23 ( + ID INTEGER NOT NULL PRIMARY KEY, + DAT VARCHAR(32) NOT NULL UNIQUE + ) $self->{innodb} + }, + + qq{ + CREATE TABLE LoAdEr_test24 ( + iD INTEGER NOT NULL PRIMARY KEY, + DaT VARCHAR(32) NOT NULL UNIQUE + ) $self->{innodb} + }, ); my @statements_reltests = ( @@ -366,7 +614,7 @@ sub create { id INTEGER NOT NULL PRIMARY KEY, fkid INTEGER NOT NULL, dat VARCHAR(32), - FOREIGN KEY (fkid) REFERENCES loader_test3 (id) + FOREIGN KEY( fkid ) REFERENCES loader_test3 (id) ) $self->{innodb} }, @@ -378,7 +626,7 @@ sub create { qq{ CREATE TABLE loader_test5 ( id1 INTEGER NOT NULL, - id2 INTEGER NOT NULL, -- , id2 INTEGER REFERENCES loader_test1, + iD2 INTEGER NOT NULL, dat VARCHAR(8), PRIMARY KEY (id1,id2) ) $self->{innodb} @@ -389,11 +637,11 @@ sub create { qq{ CREATE TABLE loader_test6 ( id INTEGER NOT NULL PRIMARY KEY, - id2 INTEGER, + Id2 INTEGER, loader_test2 INTEGER, dat VARCHAR(8), - FOREIGN KEY (loader_test2) REFERENCES loader_test2 (id), - FOREIGN KEY (id, id2 ) REFERENCES loader_test5 (id1,id2) + FOREIGN KEY (loader_test2) REFERENCES loader_test2 (id), + FOREIGN KEY(id,Id2) REFERENCES loader_test5 (id1,iD2) ) $self->{innodb} }, @@ -427,6 +675,146 @@ sub create { loader_test9 VARCHAR(8) NOT NULL ) $self->{innodb} }, + + qq{ + CREATE TABLE loader_test16 ( + id INTEGER NOT NULL PRIMARY KEY, + dat VARCHAR(8) + ) $self->{innodb} + }, + + qq{ INSERT INTO loader_test16 (id,dat) VALUES (2,'x16') }, + qq{ INSERT INTO loader_test16 (id,dat) VALUES (4,'y16') }, + qq{ INSERT INTO loader_test16 (id,dat) VALUES (6,'z16') }, + + qq{ + CREATE TABLE loader_test17 ( + id INTEGER NOT NULL PRIMARY KEY, + loader16_one INTEGER, + loader16_two INTEGER, + FOREIGN KEY (loader16_one) REFERENCES loader_test16 (id), + FOREIGN KEY (loader16_two) REFERENCES loader_test16 (id) + ) $self->{innodb} + }, + + qq{ INSERT INTO loader_test17 (id, loader16_one, loader16_two) VALUES (3, 2, 4) }, + qq{ INSERT INTO loader_test17 (id, loader16_one, loader16_two) VALUES (33, 4, 6) }, + + qq{ + CREATE TABLE loader_test18 ( + id INTEGER NOT NULL PRIMARY KEY, + dat VARCHAR(8) + ) $self->{innodb} + }, + + qq{ INSERT INTO loader_test18 (id,dat) VALUES (1,'x18') }, + qq{ INSERT INTO loader_test18 (id,dat) VALUES (2,'y18') }, + qq{ INSERT INTO loader_test18 (id,dat) VALUES (3,'z18') }, + + qq{ + CREATE TABLE loader_test19 ( + id INTEGER NOT NULL PRIMARY KEY, + dat VARCHAR(8) + ) $self->{innodb} + }, + + qq{ INSERT INTO loader_test19 (id,dat) VALUES (4,'x19') }, + qq{ INSERT INTO loader_test19 (id,dat) VALUES (5,'y19') }, + qq{ INSERT INTO loader_test19 (id,dat) VALUES (6,'z19') }, + + qq{ + CREATE TABLE loader_test20 ( + parent INTEGER NOT NULL, + child INTEGER NOT NULL, + PRIMARY KEY (parent, child), + FOREIGN KEY (parent) REFERENCES loader_test18 (id), + FOREIGN KEY (child) REFERENCES loader_test19 (id) + ) $self->{innodb} + }, + + q{ INSERT INTO loader_test20 (parent, child) VALUES (1,4) }, + q{ INSERT INTO loader_test20 (parent, child) VALUES (2,5) }, + q{ INSERT INTO loader_test20 (parent, child) VALUES (3,6) }, + + qq{ + CREATE TABLE loader_test21 ( + id INTEGER NOT NULL PRIMARY KEY, + dat VARCHAR(8) + ) $self->{innodb} + }, + + q{ INSERT INTO loader_test21 (id,dat) VALUES (7,'a21')}, + q{ INSERT INTO loader_test21 (id,dat) VALUES (11,'b21')}, + q{ INSERT INTO loader_test21 (id,dat) VALUES (13,'c21')}, + q{ INSERT INTO loader_test21 (id,dat) VALUES (17,'d21')}, + + qq{ + CREATE TABLE loader_test22 ( + parent INTEGER NOT NULL, + child INTEGER NOT NULL, + PRIMARY KEY (parent, child), + FOREIGN KEY (parent) REFERENCES loader_test21 (id), + FOREIGN KEY (child) REFERENCES loader_test21 (id) + ) $self->{innodb} + }, + + q{ INSERT INTO loader_test22 (parent, child) VALUES (7,11)}, + q{ INSERT INTO loader_test22 (parent, child) VALUES (11,13)}, + q{ INSERT INTO loader_test22 (parent, child) VALUES (13,17)}, + + qq{ + CREATE TABLE loader_test25 ( + id1 INTEGER NOT NULL, + id2 INTEGER NOT NULL, + dat VARCHAR(8), + PRIMARY KEY (id1,id2) + ) $self->{innodb} + }, + + q{ INSERT INTO loader_test25 (id1,id2,dat) VALUES (33,5,'x25') }, + q{ INSERT INTO loader_test25 (id1,id2,dat) VALUES (33,7,'y25') }, + q{ INSERT INTO loader_test25 (id1,id2,dat) VALUES (3,42,'z25') }, + + qq{ + CREATE TABLE loader_test26 ( + id INTEGER NOT NULL PRIMARY KEY, + rel1 INTEGER NOT NULL, + rel2 INTEGER NOT NULL, + FOREIGN KEY (id, rel1) REFERENCES loader_test25 (id1, id2), + FOREIGN KEY (id, rel2) REFERENCES loader_test25 (id1, id2) + ) $self->{innodb} + }, + + q{ INSERT INTO loader_test26 (id,rel1,rel2) VALUES (33,5,7) }, + q{ INSERT INTO loader_test26 (id,rel1,rel2) VALUES (3,42,42) }, + + qq{ + CREATE TABLE loader_test27 ( + id INTEGER NOT NULL PRIMARY KEY + ) $self->{innodb} + }, + + q{ INSERT INTO loader_test27 (id) VALUES (1) }, + q{ INSERT INTO loader_test27 (id) VALUES (2) }, + + qq{ + CREATE TABLE loader_test28 ( + id INTEGER NOT NULL PRIMARY KEY, + FOREIGN KEY (id) REFERENCES loader_test27 (id) + ) $self->{innodb} + }, + + q{ INSERT INTO loader_test28 (id) VALUES (1) }, + + qq{ + CREATE TABLE loader_test29 ( + id INTEGER NOT NULL PRIMARY KEY, + fk INTEGER UNIQUE, + FOREIGN KEY (fk) REFERENCES loader_test27 (id) + ) $self->{innodb} + }, + + q{ INSERT INTO loader_test29 (id,fk) VALUES (1,1) }, ); my @statements_advanced = ( @@ -495,12 +883,10 @@ sub create { }, q{ INSERT INTO loader_test15 (id,loader_test14) VALUES (1,123) }, - ); + ); $self->drop_tables; - $self->{created} = 1; - my $dbh = $self->dbconnect(1); # Silence annoying but harmless postgres "NOTICE: CREATE TABLE..." @@ -514,9 +900,6 @@ sub create { # hack for now, since DB2 doesn't like inline comments, and we need # to test one for mysql, which works on everyone else... # this all needs to be refactored anyways. - if($self->{vendor} =~ /DB2/i) { - @statements_reltests = map { s/--.*\n//; $_ } @statements_reltests; - } $dbh->do($_) for (@statements_reltests); unless($self->{vendor} =~ /sqlite/i) { $dbh->do($_) for (@statements_advanced); @@ -534,11 +917,11 @@ sub create { sub drop_tables { my $self = shift; - return unless $self->{created}; - my @tables = qw/ loader_test1 loader_test2 + LOADER_TEST23 + LoAdEr_test24 /; my @tables_reltests = qw/ @@ -549,6 +932,18 @@ sub drop_tables { loader_test8 loader_test7 loader_test9 + loader_test17 + loader_test16 + loader_test20 + loader_test19 + loader_test18 + loader_test22 + loader_test21 + loader_test26 + loader_test25 + loader_test28 + loader_test29 + loader_test27 /; my @tables_advanced = qw/ @@ -566,6 +961,8 @@ sub drop_tables { loader_test14 /; + my @tables_rescan = qw/ loader_test30 /; + my $drop_fk_mysql = q{ALTER TABLE loader_test10 DROP FOREIGN KEY loader_test11_fk;}; @@ -591,11 +988,15 @@ sub drop_tables { unless($self->{no_implicit_rels}) { $dbh->do("DROP TABLE $_") for (@tables_implicit_rels); } + $dbh->do("DROP TABLE $_") for (@tables_rescan); } $dbh->do("DROP TABLE $_") for (@tables); $dbh->disconnect; } -sub DESTROY { shift->drop_tables; } +sub DESTROY { + my $self = shift; + $self->drop_tables if $self->{_created}; +} 1;