X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F72pg.t;h=5f00ff9d86a21835bdae5efd07c484deb0e02ed3;hb=f45dc928a3d4a50b495dde22a423b3ce0da5234c;hp=c02a5e32f98449b3f243bb15809b4309036eeee6;hpb=5f35ba0fbddfcfe22694f8deff22da4db4f01846;p=dbsrgits%2FDBIx-Class.git diff --git a/t/72pg.t b/t/72pg.t index c02a5e3..5f00ff9 100644 --- a/t/72pg.t +++ b/t/72pg.t @@ -4,10 +4,12 @@ use warnings; use Test::More; use Test::Exception; use Sub::Name; +use Config; use DBIx::Class::Optional::Dependencies (); use lib qw(t/lib); use DBICTest; -use DBIx::Class::_Util 'is_literal_value'; +use SQL::Abstract 'is_literal_value'; +use DBIx::Class::_Util 'is_exception'; plan skip_all => 'Test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_rdbms_pg') unless DBIx::Class::Optional::Dependencies->req_ok_for ('test_rdbms_pg'); @@ -147,6 +149,16 @@ for my $use_insert_returning ($test_server_supports_insert_returning run_apk_tests($schema); #< older set of auto-pk tests run_extended_apk_tests($schema); #< new extended set of auto-pk tests + +######## test the pg-specific syntax from https://rt.cpan.org/Ticket/Display.html?id=99503 + lives_ok { + is( + $schema->resultset('Artist')->search({ artistid => { -in => \ '(select 4) union (select 5)' } })->count, + 2, + 'Two expected artists found on subselect union within IN', + ); + }; + ### type_info tests my $test_type_info = { @@ -184,14 +196,19 @@ for my $use_insert_returning ($test_server_supports_insert_returning my $type_info = $schema->storage->columns_info_for('dbic_t_schema.artist'); my $artistid_defval = delete $type_info->{artistid}->{default_value}; - like($artistid_defval, - qr/^nextval\('([^\.]*\.){0,1}artist_artistid_seq'::(?:text|regclass)\)/, - 'columns_info_for - sequence matches Pg get_autoinc_seq expectations'); - is_deeply($type_info, $test_type_info, - 'columns_info_for - column data types'); - + # The curor info is too radically different from what is in the column_info + # call - just punt it (DBD::SQLite tests the codepath plenty enough) + unless (DBIx::Class::_ENV_::STRESSTEST_COLUMN_INFO_UNAWARE_STORAGE) { + like( + $artistid_defval, + qr/^nextval\('([^\.]*\.){0,1}artist_artistid_seq'::(?:text|regclass)\)/, + 'columns_info_for - sequence matches Pg get_autoinc_seq expectations' + ); + is_deeply($type_info, $test_type_info, + 'columns_info_for - column data types'); + } ####### Array tests @@ -339,14 +356,9 @@ my $cds = $artist->cds_unordered->search({ lives_ok { $cds->update({ year => '2010' }) } 'Update on prefetched rs'; ## Test SELECT ... FOR UPDATE - SKIP: { - if(eval { require Sys::SigAction }) { - Sys::SigAction->import( 'set_sig_handler' ); - } - else { - skip "Sys::SigAction is not available", 6; - } + skip "Your system does not support unsafe signals (d_sigaction) - unable to run deadlock test", 1 + unless eval { $Config{d_sigaction} and require POSIX }; my ($timed_out, $artist2); @@ -385,15 +397,28 @@ lives_ok { $cds->update({ year => '2010' }) } 'Update on prefetched rs'; is($artist->artistid, 1, "select returns artistid = 1"); $timed_out = 0; + eval { - my $h = set_sig_handler( 'ALRM', sub { die "DBICTestTimeout" } ); + # can not use %SIG assignment directly - we need sigaction below + # localization to a block still works however + local $SIG{ALRM}; + + POSIX::sigaction( POSIX::SIGALRM() => POSIX::SigAction->new( + sub { die "DBICTestTimeout" }, + )); + alarm(2); $artist2 = $schema2->resultset('Artist')->find(1); $artist2->name('fooey'); $artist2->update; - alarm(0); }; - $timed_out = $@ =~ /DBICTestTimeout/; + + alarm(0); + + if (is_exception($@)) { + $timed_out = $@ =~ /DBICTestTimeout/ + or die $@; + } }); $t->{test_sub}->();