X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Frun%2F23cache.tl;h=3f9820461d453fd585823571655c28bfa0fe910a;hb=479ed4231d5f405d559f8614892fba579064b1f8;hp=e654c6179155e2f94ca699f040afcd86ba9c39c7;hpb=5a5bec6c01bda57e0f09e77b4e36ce84edeb5fa2;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/t/run/23cache.tl b/t/run/23cache.tl index e654c61..3f98204 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 => 12; +plan tests => 16; my $rs = $schema->resultset("Artist")->search( { artistid => 1 } @@ -13,6 +13,16 @@ my $artist = $rs->first; is( scalar @{ $rs->get_cache }, 0, 'cache is not populated without cache attribute' ); +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 }, { @@ -73,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'; @@ -127,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;