1use strict; 2use warnings; 3 4use Test::More; 5use Test::Exception; 6use lib qw(t/lib); 7use DBICTest; 8 9my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_INFORMIX_${_}" } qw/DSN USER PASS/}; 10 11#warn "$dsn $user $pass"; 12 13plan skip_all => 'Set $ENV{DBICTEST_INFORMIX_DSN}, _USER and _PASS to run this test' 14 unless ($dsn && $user); 15 16my $schema = DBICTest::Schema->connect($dsn, $user, $pass); 17 18my $dbh = $schema->storage->dbh; 19 20eval { $dbh->do("DROP TABLE artist") }; 21 22$dbh->do("CREATE TABLE artist (artistid SERIAL, name VARCHAR(255), charfield CHAR(10), rank INTEGER DEFAULT 13);"); 23 24my $ars = $schema->resultset('Artist'); 25is ( $ars->count, 0, 'No rows at first' ); 26 27# test primary key handling 28my $new = $ars->create({ name => 'foo' }); 29ok($new->artistid, "Auto-PK worked"); 30 31# test explicit key spec 32$new = $ars->create ({ name => 'bar', artistid => 66 }); 33is($new->artistid, 66, 'Explicit PK worked'); 34$new->discard_changes; 35is($new->artistid, 66, 'Explicit PK assigned'); 36 37# test populate 38lives_ok (sub { 39 my @pop; 40 for (1..2) { 41 push @pop, { name => "Artist_$_" }; 42 } 43 $ars->populate (\@pop); 44}); 45 46# test populate with explicit key 47lives_ok (sub { 48 my @pop; 49 for (1..2) { 50 push @pop, { name => "Artist_expkey_$_", artistid => 100 + $_ }; 51 } 52 $ars->populate (\@pop); 53}); 54 55# count what we did so far 56is ($ars->count, 6, 'Simple count works'); 57 58# test LIMIT support 59my $lim = $ars->search( {}, 60 { 61 rows => 3, 62 offset => 4, 63 order_by => 'artistid' 64 } 65); 66is( $lim->count, 2, 'ROWS+OFFSET count ok' ); 67is( $lim->all, 2, 'Number of ->all objects matches count' ); 68 69# test iterator 70$lim->reset; 71is( $lim->next->artistid, 101, "iterator->next ok" ); 72is( $lim->next->artistid, 102, "iterator->next ok" ); 73is( $lim->next, undef, "next past end of resultset ok" ); 74 75 76done_testing; 77 78# clean up our mess 79END { 80 my $dbh = eval { $schema->storage->_dbh }; 81 $dbh->do("DROP TABLE artist") if $dbh; 82} 83