Merge 'trunk' into 'replication_dedux'
John Napiorkowski [Wed, 14 May 2008 13:40:07 +0000 (13:40 +0000)]
r12028@dev (orig r4378):  captainL | 2008-05-11 13:43:58 -0500
added test for find or create related functionality in nested inserts
r12029@dev (orig r4379):  captainL | 2008-05-11 14:03:27 -0500
sanified new multi_create test
r12030@dev (orig r4381):  ribasushi | 2008-05-12 06:09:20 -0500
Add failing tests for missing safeguards for multilevel prefetch (don't know the internals well enough to fix the issue itself)

1  2 
t/77prefetch.t

diff --combined t/77prefetch.t
@@@ -16,7 -16,7 +16,7 @@@ BEGIN 
      eval "use DBD::SQLite";
      plan $@
          ? ( skip_all => 'needs DBD::SQLite for testing' )
-         : ( tests => 56 );
+         : ( tests => 58 );
  }
  
  # figure out if we've got a version of sqlite that is older than 3.2.6, in
@@@ -227,7 -227,7 +227,7 @@@ $schema->storage->debugcb(sub { $querie
  $schema->storage->debug(1);
  
  my $tree_like =
 -     $schema->resultset('TreeLike')->find(4,
 +     $schema->resultset('TreeLike')->find(5,
         { join     => { parent => { parent => 'parent' } },
           prefetch => { parent => { parent => 'parent' } } });
  
@@@ -244,21 -244,21 +244,21 @@@ $schema->storage->debugobj->callback(un
  
  cmp_ok($queries, '==', 1, 'Only one query run');
  
 -$tree_like = $schema->resultset('TreeLike')->search({'me.id' => 1});
 +$tree_like = $schema->resultset('TreeLike')->search({'me.id' => 2});
  $tree_like = $tree_like->search_related('children')->search_related('children')->search_related('children')->first;
  is($tree_like->name, 'quux', 'Tree search_related ok');
  
  $tree_like = $schema->resultset('TreeLike')->search_related('children',
 -    { 'children.id' => 2, 'children_2.id' => 3 },
 +    { 'children.id' => 3, 'children_2.id' => 4 },
      { prefetch => { children => 'children' } }
    )->first;
  is(eval { $tree_like->children->first->children->first->name }, 'quux',
     'Tree search_related with prefetch ok');
  
  $tree_like = eval { $schema->resultset('TreeLike')->search(
 -    { 'children.id' => 2, 'children_2.id' => 5 }, 
 +    { 'children.id' => 3, 'children_2.id' => 6 }, 
      { join => [qw/children children/] }
 -  )->search_related('children', { 'children_4.id' => 6 }, { prefetch => 'children' }
 +  )->search_related('children', { 'children_4.id' => 7 }, { prefetch => 'children' }
    )->first->children->first; };
  is(eval { $tree_like->name }, 'fong', 'Tree with multiple has_many joins ok');
  
@@@ -344,7 -344,8 +344,8 @@@ is($art_rs_pr->search_related('cds')->s
  
  is($queries, 0, 'chained search_related after has_many->has_many prefetch ran no queries');
  
+ # once the following TODO is complete, remove the 2 stop-gap tests immediately after the TODO block
+ # (the TODO block itself contains tests ensuring that the stop-gaps are removed)
  TODO: {
      local $TODO = 'Prefetch of multiple has_many rels at the same level (currently must die to protect the clueless git)';
      use DBIx::Class::ResultClass::HashRefInflator;
  
      is_deeply ([$pr_tags_rs->all], [$tags_rs->all], 'same structure returned with and without prefetch over several same level has_many\'s (M -> 1 -> M + M)');
  };
+ eval { my $track = $schema->resultset('CD')->search ({ 'me.title' => 'Forkful of bees' }, { prefetch => [qw/tracks tags/] })->first->tracks->first };
+ ok ($@, 'exception on attempt to prefetch several same level has_many\'s (1 -> M + M)');
+ eval { my $tag = $schema->resultset('LinerNotes')->search ({ notes => 'Buy Whiskey!' }, { prefetch => { cd => [qw/tags tracks/] } })->first->cd->tags->first };
+ ok ($@, 'exception on attempt to prefetch several same level has_many\'s (M -> 1 -> M + M)');