X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F83cache.t;h=2f4c0364b809bf2678a09aa113597319fcb27ca0;hb=0e7a447e570daf41c11b403fd81046756894cc27;hp=a3c94c0c758196097b8bca7a52363aa1590e1190;hpb=d6915f449e2d68ac184d6bc616043fd605913757;p=dbsrgits%2FDBIx-Class.git diff --git a/t/83cache.t b/t/83cache.t index a3c94c0..2f4c036 100644 --- a/t/83cache.t +++ b/t/83cache.t @@ -5,14 +5,13 @@ use Test::More; use lib qw(t/lib); use DBICTest; -my $schema = DBICTest::init_schema(); +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 } @@ -40,12 +39,13 @@ $rs->set_cache( $artists ); is( scalar @{$rs->get_cache}, 2, 'set_cache() is functional' ); -$cd = $schema->resultset('CD')->find(1); +my $cd = $schema->resultset('CD')->find(1); $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);