X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F83cache.t;h=5fd25d34bcee205140b1f5d0b3e4185692c51fab;hb=8273e845426f0187b4ad6c4a1b42286fa09a648f;hp=78113b3e876122279da5be57887d04a05cb2c453;hpb=a47e123334d8bcea0d34dc9ea09738d6f3b1fd49;p=dbsrgits%2FDBIx-Class.git diff --git a/t/83cache.t b/t/83cache.t index 78113b3..5fd25d3 100644 --- a/t/83cache.t +++ b/t/83cache.t @@ -1,5 +1,5 @@ use strict; -use warnings; +use warnings; use Test::More; use lib qw(t/lib); @@ -8,11 +8,10 @@ use DBICTest; my $schema = DBICTest->init_schema(); my $queries; -$schema->storage->debugcb( sub{ $queries++ } ); +my $debugcb = sub{ $queries++ }; +my $sdebug = $schema->storage->debug; -eval "use DBD::SQLite"; -plan skip_all => 'needs DBD::SQLite for testing' if $@; -plan tests => 22; +plan tests => 23; my $rs = $schema->resultset("Artist")->search( { artistid => 1 } @@ -46,6 +45,7 @@ $rs->clear_cache; $queries = 0; $schema->storage->debug(1); +$schema->storage->debugcb ($debugcb); $rs = $schema->resultset('Artist')->search( undef, { cache => 1 } ); while( $artist = $rs->next ) {} @@ -53,7 +53,8 @@ $artist = $rs->first(); is( $queries, 1, 'revisiting a row does not issue a query when cache => 1' ); -$schema->storage->debug(0); +$schema->storage->debug($sdebug); +$schema->storage->debugcb (undef); my @a = $schema->resultset("Artist")->search( { }, @@ -73,17 +74,16 @@ $rs = $schema->resultset("Artist")->search( } ); -use Data::Dumper; $Data::Dumper::Deparse = 1; - # start test for prefetch SELECT count $queries = 0; $schema->storage->debug(1); +$schema->storage->debugcb ($debugcb); $artist = $rs->first; $rs->reset(); # make sure artist contains a related resultset for cds -is( ref $artist->{related_resultsets}->{cds}, 'DBIx::Class::ResultSet', 'artist has a related_resultset for cds' ); +isa_ok( $artist->{related_resultsets}{cds}, 'DBIx::Class::ResultSet', 'artist has a related_resultset for cds' ); # check if $artist->cds->get_cache is populated is( scalar @{$artist->cds->get_cache}, 3, 'cache for artist->cds contains correct number of records'); @@ -99,7 +99,8 @@ is( $artist->count_related('cds'), 3, 'artist->count_related returns correct val is($queries, 1, 'only one SQL statement executed'); -$schema->storage->debug(0); +$schema->storage->debug($sdebug); +$schema->storage->debugcb (undef); # make sure related_resultset is deleted after object is updated $artist->set_column('name', 'New Name'); @@ -131,18 +132,21 @@ is($artist->cds, 0, 'No cds for this artist'); # SELECT count for nested has_many prefetch $queries = 0; $schema->storage->debug(1); +$schema->storage->debugcb ($debugcb); $artist = ($rs->all)[0]; is($queries, 1, 'only one SQL statement executed'); -$schema->storage->debug(0); +$schema->storage->debug($sdebug); +$schema->storage->debugcb (undef); my @objs; #$artist = $rs->find(1); $queries = 0; $schema->storage->debug(1); +$schema->storage->debugcb ($debugcb); my $cds = $artist->cds; my $tags = $cds->next->tags; @@ -158,7 +162,15 @@ while( my $tag = $tags->next ) { push @objs, $tag->id; #warn "tag: ", $tag->ID; } -is_deeply( \@objs, [ 2, 5, 8 ], 'second cd has correct tags' ); +is_deeply( \@objs, [ 1 ], 'second cd has correct tags' ); + +$tags = $cds->next->tags; +@objs = (); +while( my $tag = $tags->next ) { + push @objs, $tag->id; #warn "tag: ", $tag->ID; +} + +is_deeply( \@objs, [ 2, 5, 8 ], 'third cd has correct tags' ); is( $queries, 0, 'no additional SQL statements while checking nested data' ); @@ -177,5 +189,5 @@ $artist = $rs->find(1); is( $queries, 1, 'only one select statement on find with has_many prefetch on resultset' ); -$schema->storage->debug(0); - +$schema->storage->debug($sdebug); +$schema->storage->debugcb (undef);