X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F72pg.t;h=67911aa6d1c067f8d16473a40a133b909f04c53a;hb=68de943862f06cabd397d2e74d12cd9cdc999779;hp=162c276245eee96bf5977d794c58865729308dd8;hpb=bbdda28109ffb2442af84b3cbe5c4921714a52dd;p=dbsrgits%2FDBIx-Class.git diff --git a/t/72pg.t b/t/72pg.t index 162c276..67911aa 100644 --- a/t/72pg.t +++ b/t/72pg.t @@ -10,12 +10,12 @@ use DBICTest; my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_PG_${_}" } qw/DSN USER PASS/}; -plan skip_all => < <<'EOM' unless $dsn && $user; +Set $ENV{DBICTEST_PG_DSN}, _USER and _PASS to run this test ( NOTE: This test drops and creates tables called 'artist', 'cd', 'timestamp_primary_key_test', 'track', 'casecheck', 'array_test' and 'sequence_test' as well as following sequences: 'pkid1_seq', 'pkid2_seq' and -'nonpkid_seq''. as well as following schemas: 'dbic_t_schema', +'nonpkid_seq'. as well as following schemas: 'dbic_t_schema', 'dbic_t_schema_2', 'dbic_t_schema_3', 'dbic_t_schema_4', and 'dbic_t_schema_5') EOM @@ -32,8 +32,10 @@ DBICTest::Schema->load_classes( map {s/.+:://;$_} @test_classes ) if @test_class # Check that datetime_parser returns correctly before we explicitly connect. SKIP: { - eval { require DateTime::Format::Pg }; - skip "DateTime::Format::Pg required", 2 if $@; + skip ( + "Pg parser detection test needs " . DBIx::Class::Optional::Dependencies->req_missing_for ('test_dt_pg'), + 2 + ) unless DBIx::Class::Optional::Dependencies->req_ok_for ('test_dt_pg'); my $store = ref $s->storage; is($store, 'DBIx::Class::Storage::DBI', 'Started with generic storage'); @@ -53,6 +55,37 @@ DBICTest::Schema->load_classes( map {s/.+:://;$_} @test_classes ) if @test_class ok (!$s->storage->_dbh, 'still not connected'); } +# test LIMIT support +{ + my $schema = DBICTest::Schema->connect($dsn, $user, $pass); + drop_test_schema($schema); + create_test_schema($schema); + for (1..6) { + $schema->resultset('Artist')->create({ name => 'Artist ' . $_ }); + } + my $it = $schema->resultset('Artist')->search( {}, + { rows => 3, + offset => 2, + order_by => 'artistid' } + ); + is( $it->count, 3, "LIMIT count ok" ); # ask for 3 rows out of 6 artists + is( $it->next->name, "Artist 3", "iterator->next ok" ); + $it->next; + $it->next; + $it->next; + is( $it->next, undef, "next past end of resultset ok" ); + + # Limit with select-lock + lives_ok { + $schema->txn_do (sub { + isa_ok ( + $schema->resultset('Artist')->find({artistid => 1}, {for => 'update', rows => 1}), + 'DBICTest::Schema::Artist', + ); + }); + } 'Limited FOR UPDATE select works'; +} + # check if we indeed do support stuff my $test_server_supports_insert_returning = do { my $v = DBICTest::Schema->connect($dsn, $user, $pass) @@ -234,16 +267,12 @@ my $artist = $schema->resultset('Artist')->first; my $cds = $artist->cds_unordered->search({ year => { '!=' => 2010 } }, { prefetch => 'liner_notes' }); -TODO: { - todo_skip 'update resultset with a prefetch over a might_have rel', 1; - $cds->update({ year => '2010' }); -} - +lives_ok { $cds->update({ year => '2010' }) } 'Update on prefetched rs'; ## Test SELECT ... FOR UPDATE SKIP: { - if(eval "require Sys::SigAction" && !$@) { + if(eval { require Sys::SigAction }) { Sys::SigAction->import( 'set_sig_handler' ); } else {