From: Rafael Kitover Date: Thu, 4 Feb 2010 15:08:27 +0000 (+0000) Subject: test file for firebird, not passing yet X-Git-Tag: v0.08121~73^2~46 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3a8aae80507a1dca3d0ac8520eb90b6d85de2a1e;p=dbsrgits%2FDBIx-Class.git test file for firebird, not passing yet --- diff --git a/t/750firebird.t b/t/750firebird.t new file mode 100644 index 0000000..1e1f72b --- /dev/null +++ b/t/750firebird.t @@ -0,0 +1,160 @@ +use strict; +use warnings; + +use Test::More; +use Test::Exception; +use lib qw(t/lib); +use DBICTest; + +# tests stolen from 749sybase_asa.t + +my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_FIREBIRD_${_}" } qw/DSN USER PASS/}; +my ($dsn2, $user2, $pass2) = @ENV{map { "DBICTEST_FIREBIRD_ODBC_${_}" } qw/DSN USER PASS/}; + +plan skip_all => <<'EOF' unless $dsn || $dsn2; +Set $ENV{DBICTEST_FIREBIRD_DSN} and/or $ENV{DBICTEST_FIREBIRD_ODBC_DSN}, +_USER and _PASS to run these tests +EOF + +my @info = ( + [ $dsn, $user, $pass ], + [ $dsn2, $user2, $pass2 ], +); + +my @handles_to_clean; + +foreach my $info (@info) { + my ($dsn, $user, $pass) = @$info; + + next unless $dsn; + + my $schema = DBICTest::Schema->connect($dsn, $user, $pass); + + my $dbh = $schema->storage->dbh; + + push @handles_to_clean, $dbh; + + eval { $dbh->do("DROP TABLE artist") }; + + $dbh->do(<do('CREATE GENERATOR gen_artist_artistid'); + $dbh->do(<resultset('Artist'); + is ( $ars->count, 0, 'No rows at first' ); + +# test primary key handling + my $new = $ars->create({ name => 'foo' }); + ok($new->artistid, "Auto-PK worked"); + +# test explicit key spec + $new = $ars->create ({ name => 'bar', artistid => 66 }); + is($new->artistid, 66, 'Explicit PK worked'); + $new->discard_changes; + is($new->artistid, 66, 'Explicit PK assigned'); + +# test populate + lives_ok (sub { + my @pop; + for (1..2) { + push @pop, { name => "Artist_$_" }; + } + $ars->populate (\@pop); + }); + +# test populate with explicit key + lives_ok (sub { + my @pop; + for (1..2) { + push @pop, { name => "Artist_expkey_$_", artistid => 100 + $_ }; + } + $ars->populate (\@pop); + }); + +# count what we did so far + is ($ars->count, 6, 'Simple count works'); + +# test LIMIT support + my $lim = $ars->search( {}, + { + rows => 3, + offset => 4, + order_by => 'artistid' + } + ); + is( $lim->count, 2, 'ROWS+OFFSET count ok' ); + is( $lim->all, 2, 'Number of ->all objects matches count' ); + +# test iterator + $lim->reset; + is( $lim->next->artistid, 101, "iterator->next ok" ); + is( $lim->next->artistid, 102, "iterator->next ok" ); + is( $lim->next, undef, "next past end of resultset ok" ); + +# test empty insert + { + local $ars->result_source->column_info('artistid')->{is_auto_increment} = 0; + + lives_ok { $ars->create({}) } + 'empty insert works'; + } + +# test blobs (stolen from 73oracle.t) + eval { $dbh->do('DROP TABLE bindtype_test') }; + $dbh->do(q[ + CREATE TABLE bindtype_test + ( + id INT NOT NULL PRIMARY KEY, + bytea INT, + blob BLOB, + clob CLOB + ) + ]); + + my %binstr = ( 'small' => join('', map { chr($_) } ( 1 .. 127 )) ); + $binstr{'large'} = $binstr{'small'} x 1024; + + my $maxloblen = length $binstr{'large'}; + local $dbh->{'LongReadLen'} = $maxloblen; + + my $rs = $schema->resultset('BindType'); + my $id = 0; + + foreach my $type (qw( blob clob )) { + foreach my $size (qw( small large )) { + $id++; + +# turn off horrendous binary DBIC_TRACE output + local $schema->storage->{debug} = 0; + + lives_ok { $rs->create( { 'id' => $id, $type => $binstr{$size} } ) } + "inserted $size $type without dying"; + + ok($rs->find($id)->$type eq $binstr{$size}, "verified inserted $size $type" ); + } + } +} + +done_testing; + +# clean up our mess +END { + foreach my $dbh (@handles_to_clean) { + eval { $dbh->do("DROP TABLE $_") } for qw/artist bindtype_test/; + } +}