BEGIN { unless ($ENV{RELEASE_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for release candidate testing'); } } use strict; use warnings; use Test::Exception; use Test::More; BEGIN { plan skip_all => 'Cannot run these tests with a non-threaded Perl' unless eval { require threads }; } use Fey::DBIManager::Source; { my $dbh = DBI->connect( 'dbi:Pg:dbname=template1', undef, undef, { RaiseError => 1 } ); $dbh->do('SET CLIENT_MIN_MESSAGES = ERROR'); $dbh->do('DROP DATABASE IF EXISTS fey_dbimanager_testing'); $dbh->do('CREATE DATABASE fey_dbimanager_testing'); $dbh->disconnect(); $dbh = DBI->connect( 'dbi:Pg:dbname=fey_dbimanager_testing', undef, undef, { RaiseError => 1 } ); $dbh->do('SET CLIENT_MIN_MESSAGES = ERROR'); $dbh->do('CREATE TABLE test ( test_id SERIAL8 PRIMARY KEY )'); } my $source = Fey::DBIManager::Source->new( dsn => 'dbi:Pg:dbname=fey_dbimanager_testing' ); lives_ok { $source->dbh()->selectcol_arrayref('SELECT * FROM test') } 'Can select from test table'; my $thread = threads->create( sub { eval { $source->dbh()->selectcol_arrayref('SELECT * FROM test') }; return $@; } ); lives_ok { $source->dbh()->selectcol_arrayref('SELECT * FROM test') } 'Can select from test table in original thread'; my $error = $thread->join(); is( $error, q{}, 'Can select in new thread' ); lives_ok { $source->dbh()->selectcol_arrayref('SELECT * FROM test') } 'Can select from test table in original thread after new thread exits'; done_testing();