X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F72pg.t;h=162c276245eee96bf5977d794c58865729308dd8;hb=bbdda2810;hp=d676812c5d89888ab219da073ac44bb1c9fef7ab;hpb=d955e93801fcdb5f019866252d9155d727aad646;p=dbsrgits%2FDBIx-Class.git diff --git a/t/72pg.t b/t/72pg.t index d676812..162c276 100644 --- a/t/72pg.t +++ b/t/72pg.t @@ -3,6 +3,7 @@ use warnings; use Test::More; use Test::Exception; +use Sub::Name; use lib qw(t/lib); use DBICTest; @@ -23,23 +24,6 @@ EOM our @test_classes; #< array that will be pushed into by test classes defined in this file DBICTest::Schema->load_classes( map {s/.+:://;$_} @test_classes ) if @test_classes; -my $test_server_supports_insert_returning = do { - my $s = DBICTest::Schema->connect($dsn, $user, $pass); - $s->storage->_determine_driver; - $s->storage->_supports_insert_returning; -}; - -my $schema; - -for my $use_insert_returning ($test_server_supports_insert_returning - ? (0,1) - : (0) -) { - no warnings qw/redefine once/; - local *DBIx::Class::Storage::DBI::Pg::_supports_insert_returning = sub { - $use_insert_returning - }; - ### pre-connect tests (keep each test separate as to make sure rebless() runs) { my $s = DBICTest::Schema->connect($dsn, $user, $pass); @@ -60,6 +44,7 @@ for my $use_insert_returning ($test_server_supports_insert_returning ok (!$s->storage->_dbh, 'still not connected'); } + { my $s = DBICTest::Schema->connect($dsn, $user, $pass); # make sure sqlt_type overrides work (::Storage::DBI::Pg does this) @@ -68,6 +53,49 @@ for my $use_insert_returning ($test_server_supports_insert_returning ok (!$s->storage->_dbh, 'still not connected'); } +# check if we indeed do support stuff +my $test_server_supports_insert_returning = do { + my $v = DBICTest::Schema->connect($dsn, $user, $pass) + ->storage + ->_get_dbh + ->get_info(18); + $v =~ /^(\d+)\.(\d+)/ + or die "Unparseable Pg server version: $v\n"; + + ( sprintf ('%d.%d', $1, $2) >= 8.2 ) ? 1 : 0; +}; +is ( + DBICTest::Schema->connect($dsn, $user, $pass)->storage->_use_insert_returning, + $test_server_supports_insert_returning, + 'insert returning capability guessed correctly' +); + +my $schema; +for my $use_insert_returning ($test_server_supports_insert_returning + ? (0,1) + : (0) +) { + + no warnings qw/once/; + local *DBICTest::Schema::connection = subname 'DBICTest::Schema::connection' => sub { + my $s = shift->next::method (@_); + $s->storage->_use_insert_returning ($use_insert_returning); + $s; + }; + +### test capability override + { + my $s = DBICTest::Schema->connect($dsn, $user, $pass); + + ok (!$s->storage->_dbh, 'definitely not connected'); + + ok ( + ! ($s->storage->_use_insert_returning xor $use_insert_returning), + 'insert returning capability set correctly', + ); + ok (!$s->storage->_dbh, 'still not connected (capability override works)'); + } + ### connect, create postgres-specific test schema $schema = DBICTest::Schema->connect($dsn, $user, $pass); @@ -290,7 +318,7 @@ TODO: { ######## test non-serial auto-pk - if ($schema->storage->_supports_insert_returning) { + if ($schema->storage->_use_insert_returning) { $schema->source('TimestampPrimaryKey')->name('dbic_t_schema.timestamp_primary_key_test'); my $row = $schema->resultset('TimestampPrimaryKey')->create({}); ok $row->id;