X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Frun%2F23cache.tl;h=1f85dcbcc02610cbccee4420e4c6e77b6d55d88e;hb=f109ee4aa6c7f7cc4eaf6cd15b6d67c2ebcf8702;hp=77860b64a8478e1d204308aabb1dcada9842074a;hpb=27c855b871e7b52a3607f5c139ecdb3869fd8d0d;p=dbsrgits%2FDBIx-Class.git diff --git a/t/run/23cache.tl b/t/run/23cache.tl index 77860b6..1f85dcb 100644 --- a/t/run/23cache.tl +++ b/t/run/23cache.tl @@ -3,7 +3,7 @@ my $schema = shift; eval "use DBD::SQLite"; plan skip_all => 'needs DBD::SQLite for testing' if $@; -plan tests => 13; +plan tests => 15; my $rs = $schema->resultset("Artist")->search( { artistid => 1 } @@ -13,25 +13,15 @@ my $artist = $rs->first; is( scalar @{ $rs->get_cache }, 0, 'cache is not populated without cache attribute' ); -# start test for prefetch SELECT count -unlink 't/var/dbic.trace' if -e 't/var/dbic.trace'; -DBI->trace(1, 't/var/dbic.trace'); - -$artist = $schema->resultset('Artist')->find(1, { prefetch => [qw/cds/] }); - -# count the SELECTs -DBI->trace(0, undef); -$selects = 0; -$trace = IO::File->new('t/var/dbic.trace', '<') - or die "Unable to read trace file"; -while (<$trace>) { - $selects++ if /SELECT/; -} -$trace->close; -unlink 't/var/dbic.trace'; - -is( $selects, 1, 'only one select statement on find with has_many prefetch' ); +my @a = $schema->resultset("Artist")->search( + { }, + { + join => [ qw/ cds /], + prefetch => [qw/ cds /], + } +); +is(scalar @a, 3, 'artist with cds: count parent objects'); $rs = $schema->resultset("Artist")->search( { 'artistid' => 1 }, @@ -93,6 +83,14 @@ $rs = $schema->resultset("Artist")->search( }, } ); +{ +$schema->resultset("Artist")->create({artistid=>4,name=>qq{Humoungous Hamsters}}); +my $artist = $schema->resultset("Artist")->search( + { artistid => 4 },{prefetch=>[qw/cds/]} +)->first; + +is($artist->cds, 0, 'No cds for this artist'); +} # SELECT count for nested has_many prefetch unlink 't/var/dbic.trace' if -e 't/var/dbic.trace'; @@ -147,6 +145,45 @@ unlink 't/var/dbic.trace'; is( $selects, 0, 'no additional SQL statements while checking nested data' ); +# start test for prefetch SELECT count +unlink 't/var/dbic.trace' if -e 't/var/dbic.trace'; +DBI->trace(1, 't/var/dbic.trace'); + +$artist = $schema->resultset('Artist')->find(1, { prefetch => [qw/cds/] }); + +# count the SELECTs +DBI->trace(0, undef); +$selects = 0; +$trace = IO::File->new('t/var/dbic.trace', '<') + or die "Unable to read trace file"; +while (<$trace>) { + $selects++ if /SELECT/; +} +$trace->close; +unlink 't/var/dbic.trace'; + +is( $selects, 1, 'only one select statement on find with inline has_many prefetch' ); + +# start test for prefetch SELECT count +unlink 't/var/dbic.trace' if -e 't/var/dbic.trace'; +DBI->trace(1, 't/var/dbic.trace'); + +$rs = $schema->resultset('Artist')->search(undef, { prefetch => [qw/cds/] }); +$artist = $rs->find(1); + +# count the SELECTs +DBI->trace(0, undef); +$selects = 0; +$trace = IO::File->new('t/var/dbic.trace', '<') + or die "Unable to read trace file"; +while (<$trace>) { + $selects++ if /SELECT/; +} +$trace->close; +unlink 't/var/dbic.trace'; + +is( $selects, 1, 'only one select statement on find with has_many prefetch on resultset' ); + } 1;