X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F71mysql.t;h=e86a7609e77eb7cef4c44da33dce8ddaed392eae;hb=ad7c50fc26e1304855438776d88f4dd074d2fe05;hp=c624913b221d1055d3d7bcd13aae932bd3766b97;hpb=be6b397297ed9de2ad1f408eb7de2edcc74245d7;p=dbsrgits%2FDBIx-Class.git diff --git a/t/71mysql.t b/t/71mysql.t index c624913..e86a760 100644 --- a/t/71mysql.t +++ b/t/71mysql.t @@ -6,11 +6,15 @@ use Test::Exception; use DBI::Const::GetInfoType; use Scalar::Util qw/weaken/; +use DBIx::Class::Optional::Dependencies (); use lib qw(t/lib); use DBICTest; use DBIC::SqlMakerTest; +plan skip_all => 'Test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_rdbms_mysql') + unless DBIx::Class::Optional::Dependencies->req_ok_for ('test_rdbms_mysql'); + my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_MYSQL_${_}" } qw/DSN USER PASS/}; #warn "$dsn $user $pass"; @@ -48,7 +52,7 @@ $dbh->do("CREATE TABLE books (id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, so #'dbi:mysql:host=localhost;database=dbic_test', 'dbic_test', ''); -# make sure sqlt_type overrides work (::Storage::DBI::mysql does this) +# make sure sqlt_type overrides work (::Storage::DBI::mysql does this) { my $schema = DBICTest::Schema->connect($dsn, $user, $pass); @@ -140,7 +144,7 @@ $schema->populate ('BooksInLibrary', [ ]); # -# try a distinct + prefetch on tables with identically named columns +# try a distinct + prefetch on tables with identically named columns # (mysql doesn't seem to like subqueries with equally named columns) # @@ -169,15 +173,10 @@ $schema->populate ('BooksInLibrary', [ } SKIP: { - my $mysql_version = $dbh->get_info( $GetInfoType{SQL_DBMS_VER} ); - skip "Cannot determine MySQL server version", 1 if !$mysql_version; - - my ($v1, $v2, $v3) = $mysql_version =~ /^(\d+)\.(\d+)(?:\.(\d+))?/; - skip "Cannot determine MySQL server version", 1 if !$v1 || !defined($v2); + my $norm_version = $schema->storage->_server_info->{normalized_dbms_version} + or skip "Cannot determine MySQL server version", 1; - $v3 ||= 0; - - if( ($v1 < 5) || ($v1 == 5 && $v2 == 0 && $v3 <= 3) ) { + if ($norm_version < 5.000003_01) { $test_type_info->{charfield}->{data_type} = 'VARCHAR'; } @@ -295,8 +294,6 @@ NULLINSEARCH: { join => 'books', group_by => [ 'me.id', 'books.id' ] })->count(); }, 'count on grouped columns with the same name does not throw'); - - } ZEROINSEARCH: { @@ -334,7 +331,7 @@ ZEROINSEARCH: { 'Zero-year groups successfully', ); - # convoluted search taken verbatim from list + # convoluted search taken verbatim from list my $restrict_rs = $rs->search({ -and => [ year => { '!=', 0 }, year => { '!=', undef } @@ -372,11 +369,15 @@ ZEROINSEARCH: { my $rs = $schema_autorecon->resultset('Artist'); + my ($parent_in, $child_out); + pipe( $parent_in, $child_out ) or die "Pipe open failed: $!"; my $pid = fork(); if (! defined $pid ) { die "fork() failed: $!" } elsif ($pid) { + close $child_out; + # sanity check $schema_autorecon->storage->dbh_do(sub { is ($_[1], $orig_dbh, 'Storage holds correct $dbh in parent'); @@ -387,34 +388,42 @@ ZEROINSEARCH: { TODO: { local $TODO = "Perl $] is known to leak like a sieve" - if DBIx::Class::_ENV_::PEEPEENESS(); + if DBIx::Class::_ENV_::PEEPEENESS; ok (! defined $orig_dbh, 'Parent $dbh handle is gone'); } } else { - # wait for parent to kill its $dbh - sleep 1; + close $parent_in; #simulate a subtest to not confuse the parent TAP emission - Test::More->builder->reset; - Test::More->builder->plan('no_plan'); - Test::More->builder->_indent(' ' x 4); + my $tb = Test::More->builder; + $tb->reset; + for (qw/output failure_output todo_output/) { + close $tb->$_; + open ($tb->$_, '>&', $child_out); + } + + # wait for parent to kill its $dbh + sleep 1; # try to do something dbic-esque $rs->create({ name => "Hardcore Forker $$" }); - TODO: { local $TODO = "Perl $] is known to leak like a sieve" - if DBIx::Class::_ENV_::PEEPEENESS(); + if DBIx::Class::_ENV_::PEEPEENESS; ok (! defined $orig_dbh, 'DBIC operation triggered reconnect - old $dbh is gone'); } + done_testing; exit 0; } + while (my $ln = <$parent_in>) { + print " $ln"; + } wait; ok(!$?, 'Child subtests passed');